なぜ2つ以上の空行を1つの空行に送信できないのですか?どのようなヒントがありますか?
echo -e "hello\n\n\nhello2" | sed 's/^$\n^$/\n/g'
hello
hello2
ベストアンサー1
これが失敗する理由は、sed
複数行演算子を指定しない限り、ストリームで一度に1行しか実行できないためです。一度に1行のテキストしか表示されない場合は、複数の行の始まりと行末の^
演算子をこのように囲むことは意味がありません。$
複数の空行を折りたたむ最も簡単な方法は、cat
マンページで次を使用することです。
-s, --squeeze-blank は、
繰り返される空の出力ラインを抑制します。
仕組みは次のとおりです。
$ echo -e "hello\n\n\nworld" | cat -s
hello
world
空行を圧縮するのではなく完全に削除するには、次のようにしますgrep
。
$ echo -e "hello\n\n\nworld" | grep -v '^$'
hello
world
本当にこれを行うには、sed
複雑な式と操作を使用する必要があります。例を挙げましょう(ありがとうございます。フレッド)は、連続したスペースを必要な数だけ1つの空行に縮小します。
$ echo -e "hello\n\n\nworld" | sed -re '$!N;/^\n$/!P;D'
hello
world
cat -s
複数の空白行を縮小すると、なぜはるかに簡単なのかがわかります。