Edで2つ以上の空行を1つの空行に置き換える方法は?

Edで2つ以上の空行を1つの空行に置き換える方法は?

Edでは、次のようにすべての空白行を置き換える検索を実行できます。

g/^$/d

これにより、すべての空白行が削除されます。しかし、2つ以上の空の行を削除して1を維持するにはどうすればよいですか?たとえば、

Line 1


Line 2



Line 3

になる:

Line 1

Line 2

Line 3

ベストアンサー1

から適応ビームウィキ:

ed -s file <<EOF
v/./.,/./-1j
w
q
EOF
  • v/./:正規表現に一致しないすべての行を選択します.(たとえば、すべての空行を選択します)。彼らと次のことを行います。
    • .,/./-1jjoinコマンドは、選択した行(.)から上の空でない次の行()までの行に適用されます/./-1
  • w q:保存と終了。これにより、%p Qファイルを変更せずに出力のみを表示できます。

同様に有効ですが、元の提案はより複雑でした。

printf '%s\n' 'g/^$/.,/./-1d\' 'i\' '' w q | ed -s file

このコマンドは、2つのコマンドを使用して単一のグローバルgコマンドを表します(通常、コマンドリストは単一のコマンドで構成されています)。コマンドリストで改行の前にバックスラッシュを付ける必要があります。

  • g/^$/:空白行をすべて選択します。
    • .,/./-1d\d選択した行()から.空でない次の行()の上の行を削除します/./-1。これにより空白行がすべて削除されるため
    • 'i\' ''i上に新しい空白行を挿入します。

使用するのと同じここのドキュメントまたは、Edに餌を与えるためにPrintfを使用してください。好きなものを選択してください。

引用:POSIXバージョン

おすすめ記事