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