なぜ2つ以上の空行を1つの空行に送信できないのですか?

なぜ2つ以上の空行を1つの空行に送信できないのですか?

なぜ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複数の空白行を縮小すると、なぜはるかに簡単なのかがわかります。

おすすめ記事