macos - ম্যাকোএস এ নতুন লাইন দিয়ে কমা প্রতিস্থাপন?




unix sed (8)

আমার আইডি এর একটি ফাইল রয়েছে যা কমা বিচ্ছিন্ন। আমি একটি নতুন লাইন দিয়ে কমা প্রতিস্থাপন করার চেষ্টা করছি। আমি চেষ্টা করেছিলাম:

sed 's/,/\n/g' file

কিন্তু এটা কাজ করছে না. আমি কি অনুপস্থিত?


FWIW, নিম্নোক্ত লাইন উইন্ডোতে কাজ করে এবং আমার পাথের ভেরিয়েবলগুলিতে একটি নিউলাইন সহ সেমিকোলন প্রতিস্থাপন করে। আমি আমার গিট বিন নির্দেশিকা অধীনে ইনস্টল সরঞ্জাম ব্যবহার করছি।

echo %path% | sed -e $'s/;/\\n/g' | less

আমরা sed এই এছাড়াও করতে পারেন।

আপনি এই চেষ্টা করতে পারেন,

sed -i~bak 's/\,/\n/g' file

-i - ফাইলে সংশোধন পরিবর্তন করবে। এই বিকল্পটি ব্যবহার করার জন্য সতর্ক থাকুন।

আমি এই আপনি সাহায্য করবে আশা করি।


এটি সম্পূর্ণ করতে, এটিও কাজ করে:

echo "a,b" | sed "s/,/\\$(echo -e '\n\r')/"

দৃশ্যত \r মূল!

$ sed 's/, /\r/g' file3.txt > file4.txt

এই রূপান্তর:

ABFS, AIRM, AMED, BOSC, CALI, ECPG, FRGI, GERN, GTIV, HSON, IQNT, JRCC, LTRE,
MACK, MIDD, NKTR, NPSP, PME, PTIX, REFR, RSOL, UBNT, UPI, YONG, ZEUS

এটার জন্য:

ABFS
AIRM
AMED
BOSC
CALI
ECPG
FRGI
GERN
GTIV
HSON
IQNT
JRCC
LTRE
MACK
MIDD
NKTR
NPSP
PME
PTIX
REFR
RSOL
UBNT
UPI
YONG
ZEUS

ম্যাকওএস ভিন্ন, ম্যাক এ sed সঙ্গে এই সমস্যা সমাধানের দুটি উপায় আছে

  • প্রথমে, \'$'\n'' প্রতিস্থাপন করুন \n এটি MacOS এ কাজ করতে পারে:

    sed 's/,/\'$'\n''/g' file
    
  • দ্বিতীয়, শুধু একটি খালি লাইন ব্যবহার করুন:

    sed 's/,/\
    /g' file
    
  • গীত। দ্বারা পৃথক পরিসীমা মনোযোগ দিতে '


যদি আপনার sed ব্যবহার সম্পূর্ণরূপে প্রতিস্থাপন এক্সপ্রেশন (যেমন খনি হতে থাকে) হতে থাকে তবে আপনি এটির পরিবর্তে পার্ল -pe ব্যবহার করতে পারেন

$ echo 'foo,bar,baz' | perl -pe 's/,/,\n/g'
foo,
bar,
baz

শুধু সাফাই করার জন্য: OSX এ সিডির ম্যান পৃষ্ঠাটি (10.8; ডারউইন কার্নেল সংস্করণ 12.4.0) বলছে:

[...]

Sed নিয়মিত এক্সপ্রেশন

 The regular expressions used in sed, by default, are basic regular expressions (BREs, see re_format(7) for more information), but extended
 (modern) regular expressions can be used instead if the -E flag is given.  In addition, sed has the following two additions to regular
 expressions:

 1.   In a context address, any character other than a backslash (``\'') or newline character may be used to delimit the regular expression.
      Also, putting a backslash character before the delimiting character causes the character to be treated literally.  For example, in the
      context address \xabc\xdefx, the RE delimiter is an ``x'' and the second ``x'' stands for itself, so that the regular expression is
      ``abcxdef''.

 2.   The escape sequence \n matches a newline character embedded in the pattern space.  You cannot, however, use a literal newline charac-
      ter in an address or in the substitute command.

[...]

তাই আমি অনুমান করেছি যে একটিকে ট্র ব্যবহার করতে হবে - যেমন উল্লিখিত - বা নিফটি

sed "s/,/^M
/g"

দ্রষ্টব্য: আপনি vi এডিটরতে '^ এম' পেতে < ctrl> -v, < return> টাইপ করতে হবে


$'string' ব্যবহার করুন

আপনি একটি পেতে ব্যাকস্ল্যাশ-পালানো আক্ষরিক নতুন লাইন প্রয়োজন sed। কমপক্ষে, $'' স্ট্রিংগুলি একটি বাস্তব নতুন লাইনের সাথে প্রতিস্থাপন করবে, তবে তারপরে আপনাকে ব্যাকল্ল্যাশটি দ্বিগুণ করতে হবে যা নতুন লাইন থেকে পালাবার জন্য দেখতে হবে, উদাহরণস্বরূপ

echo "a,b" | sed -e $'s/,/\\\n/g'




sed