sed または awk を使用して改行文字を「条件付き」として削除するには?

sed または awk を使用して改行文字を「条件付き」として削除するには?

複数行を含むファイルが与えられると、一部は=最後にあります。

=次の行で終わる各行をリンクしたいと思います。他の改行は変更せずにそのままにしてください。

sed1行ずつ行われているようで、これはできませんでした。したがって、改行は常に「追加」されます。

入力例:

Apple
Banana milkshake
Cherry =
Pie

次のようにする必要があります。

Apple
Banana milkshake
Cherry Pie

私はsed/以外のツールを使用するために完全にオープンですawk

ベストアンサー1

使用awk:

$ awk '{ORS = sub(/=$/,"") ? "" : "\n"} 1' file
Apple
Banana milkshake
Cherry Pie

条件式を使用してORS(出力レコード区切り文字、デフォルト:改行)を空の文字列または改行に設定します。sub()行の終わりで置換が完了した場合(既存の行を削除)、true =、それ以外の場合はfalse最初の場合はORSに設定し""、そうでない場合に設定します"\n"1行が印刷されることを示します(ORS各行に選択された値を使用)。


あるいは、sedファイルがメモリと比較してそれほど大きくなく十分に小さいと仮定し、GNUとゼロで区切られた文字を使用することもできます。

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

sedファイル全体を 1 行で読み、=\nすべての項目をグローバルに置き換えます。

おすすめ記事