改行文字を検索してカンマ改行文字に置き換える

改行文字を検索してカンマ改行文字に置き換える

素晴らしいファイルがあります。各行は改行文字で終わり、最初の行の後の各行はコンマで始まります。このように:

blah blah blah
,more blah blah blah
,even more blah blah blah

カンマと改行文字を変更したい。

blah blah blah,
more blah blah blah,
even more blah blah blah

長さが数千行しかないのでVIでやろうとしました。さまざまな組み合わせを試しましたが、何も機能しません。おそらくほとんどそうだと思いますか?

%s//\n,/,/\n/g

しかし、末尾の文字のエラーが発生します。区切り文字とエスケープ文字を混乱させることは確かですが、何が間違っているのかわかりません。

編集:\ rではなく\ nで終わるとします。 :set listを実行すると、各行は$で終わります。

答え1

私はGNUを使ってこれを思い出しましたsed

sed -Ee 's/^[,]*(.*)$/\1,/' -e '$s/,$//' file

またはファイルから置き換えてください。

sed -i -Ee 's/^[,]*(.*)$/\1,/' -e '$s/,$//' file

0回以上現れる行の始まり,

^[,]*

そこから行末までパターンをキャプチャします。

(.*)$

キャプチャされたパターンに置き換えて,最後に追加します。

\1, 

,ラスラインを削除します。

-e '$s/,$//'

答え2

カンマと改行文字を変更したい

これは実際にPerlを使用することで可能です:

perl -0 -pe 's/\n,/,\n/g' file.txt

答え3

GNUがある場合は、ファイルがメモリに収まる場合は/オプションをsed使用できます-z--null-data

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

答え4

sedを使用 - N...P;Dループを使用して2行のバッファを維持します。

$ sed -e '$!N;s/\n,/,\n/' -e 'P;D' file
blah blah blah,
more blah blah blah,
even more blah blah blah

関連情報