エンドラインが 2 つの等号を分割しているファイル内のすべての行のエンドラインを削除しようとしています
すなわち:
1
a=
=b
2
に
1
a==b
2
私は持っている
sed -i.bak -e 's/=\n =//g' fileName
ただし、ファイルに変更を加えていないようです。私のスクリプトは正しいですか?
エンドラインが 2 つの等号を分割しているファイル内のすべての行のエンドラインを削除しようとしています
すなわち:
1
a=
=b
2
に
1
a==b
2
私は持っている
sed -i.bak -e 's/=\n =//g' fileName
ただし、ファイルに変更を加えていないようです。私のスクリプトは正しいですか?
これはうまくいくかもしれません(GNU sed):
sed '$!N;s/=\n=/==/;P;D' file
また
sed -e '$!N' -e 's/='$"\n"'=/==/' -e 'P' -e 'D' file
これを試して。ファイルの内容全体をパターン空間に保存し、等号の間のすべての改行文字を削除します。
sed -i.bak -e ':a ; $! { N; b a }; s/=\n=/==/g' fileName
次の結果が得られます。
1
a==b
2
異なる OS の異なる sed は、異なる方法で改行を扱います。sed で改行を指定する最も移植性の高い方法は、リターンの前にバックスラッシュを使用することです。
sed -e 's/=\
=//g' file
しかし、他の魔法のsed文字を呼び出して複数の行をバッファなどに丸呑みするまで、それはうまくいきません....
awkを使用するだけです:
$ cat file
1
a=
=b
2
$ awk '{printf "%s%s", $0, (/=$/ ? "" : "\n")}' file
1
a==b
2
現在の行が「=」または改行で終わっている場合は、現在の行を表示し、その後に何も表示しません。これ以上にシンプルで、移植性が高い....
ああ、元のファイルを変更したい場合は、次のようにします。
awk '{printf "%s%s", $0, (/=$/ ? "" : "\n")}' file > tmp && mv tmp file