質問はある程度すべてを教えてくれます。これはすべての空行を削除することを知っていますが、/^$/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