単一の改行文字のみを置き換えるより良い方法が必要ですか?

単一の改行文字のみを置き換えるより良い方法が必要ですか?

私は通常LaTeXでコンパイルしたり、別の形式で書いたり、改行文字は無視されるので、文ごとに1行を書くのに慣れています。私は新しい段落の始まりを示すために空行を使用します。

これでこのスタイルで書かれたファイルがあり、それをプレーンテキストで送信したいと思います。すべての単一の改行を削除し、二重の改行はそのままにしたいと思います。これが私がしたことです:

sed 's/^$/NEWLINE/' file.txt | awk '{printf "%s ",$0}' | sed 's/NEWLINE/\n\n/g' > linebreakfile.txt

これは空の行をファイルにないと確信しているいくつかのテキストに置き換えます。NEWLINE次に、すべての改行を削除しawk(一部のWebサイトでこのトリックを見つけました)、NEWLINEsを必要な2つの改行に置き換えます。

これは非常に簡単なことをするのに長い時間がかかるようです。より簡単な方法がありますか?そして、複数の空白(何らかの理由で時々現れることもあります)を1つの空白に置き換える方法もあれば良いようです。

私はemacsを使用しているので、emacs関連のトリックがあれば良いと思いますが、純粋なバージョンsedまたは純粋なawkバージョンを好みます。

ベストアンサー1

次のようにawkを使用できます。

$ awk ' /^$/ { print; } /./ { printf("%s ", $0); } ' test

または最後に追加の改行文字が必要な場合:

$ awk ' /^$/ { print; } /./ { printf("%s ", $0); } END { print ""; } ' test

または改行文字で段落を区切る場合:

$ awk ' /^$/ { print "\n"; } /./ { printf("%s ", $0); } END { print ""; } ' test

これらの awk コマンドは、モードで保護された操作を利用します。

/regex/

または

END

次の操作は、パターンが現在の行と一致する場合にのみ実行されます。

そして、これらの文字は、行の始まり、終わり、およびすべての文字が一致する正規表現^$.で特別な意味を持ちます。^$.

おすすめ記事