vim / sedで複数の空行を単一の空行に置き換える

vim / sedで複数の空行を単一の空行に置き換える

質問はある程度すべてを教えてくれます。これはすべての空行を削除することを知っていますが、/^$/d「2つ以上の空行を1つの空行に置き換える」と言う方法がわかりません。

どんなアイデアがありますか?

答え1

他の目的でvimやsedを実行しない場合、catには実際に複数の空行を縮小する簡単な組み込み方法があるのでcat -s

すでにvimにいて、そこに滞在したい場合は、内部で検索して次のように実行して置き換えることができます。 (^ Mは改行文字の視覚的表現です。+を:%s!\n\n\n\+!^M^M!gクリックして入力できます。)または直接保存するだけです。猫:入力するには。CtrlvEnter:%!cat -s

答え2

\n検索パターンで改行文字を表すために使用されます。代替テキストにCtrl+または逆参照を使用してください。Mバラより:help patternそして:help sub-replace-special(リンクから:help :s)。

%s/\(\n\n\)\n\+/\1/

答え3

Vimの場合は、次の操作を行います。

:%!cat -s

複数の空行を1つに圧縮する-sフラグを付けます。cat

答え4

sed(GNU sed) 4.2.2 使用:

sed -r '
  /^\s*$/ { 
    # blank line
:NEXT
    N # append next line to pattern space - if none, autoprint PS and exit
    s/^\s*$\n^\s*$//g;t NEXT # if 2 blank lines, clear PS and loop to NEXT
  }
  # else, autoprint PS and next/exit
' < $MYFILE

関連情報