sedが連続した改行文字を削除できますか?

sedが連続した改行文字を削除できますか?

空白行が多い文書があります。

複数の人が一緒にいるときにどのように削除しますか?

私はsed "s/\n\n//"成功せずにファイルを試しました。エラーはありません。

答え1

sed '/^$/d'

sedライン指向なので、「2つ以上の特定のバイト」を考慮することができます。とは別にバイトが改行文字の場合。その後、ライン全体にわたって動作する何かを思い出す必要があります。

答え2

不要sedgrepします:

grep .

(つまり、grepSPC、点、つまり少なくとも1つの文字を含むすべての行に一致します)。

さらに:

tr -s '\n'

(改行シーケンスを1つに圧縮します)。

Chrisが指摘したように、空の行を削除することは(上記の最初の解決策とここに焦点を当てた他のほとんどの答えのように)最初の行が空の場合、必要に応じて改行シーケンスを圧縮することと同じです。は同じではありません。ただ必要一つ前に改行文字がある場合、最初の行は空です。

答え3

指定された一連の空行に対して空行を予約するには、次のようにします。

sed -e '/./b' -e :n -e 'N;s/\n$//;tn'

答え4

ほとんどの答えと同様に、末尾のスペースを最初に削除する必要があります。二重改行を削除すると、すべての空白行が削除されます。 (考えてみてください)。

文字通り解釈すると、OPは「重複した空行がある場合はファイルからすべての空行を削除」しようとします。

一般的なユーザーは、「重複した空行のみを削除」を望んでいます。

これを行うには、最初の末尾のスペースを削除してから、cat -sを介してパイプします。

sed  s/[[:space:]]*$// | cat -s

ただし、このようにしても、余分な先行または後続の空行は削除されません。

関連情報