问题或多或少说明了一切。我知道这/^$/d
会删除所有空行,但我不知道如何说“用一个空行替换两个或多个空行”
有任何想法吗?
答案1
如果您不为了其他用途而启动 vim 或 sed,cat 实际上有一个简单的内置方法来折叠多个空白行,只需使用cat -s
.
如果你已经在 vim 中并且想留在那里,你可以通过内部搜索来做到这一点,并通过发出替换:(:%s!\n\n\n\+!^M^M!g
^M 是换行符的视觉表示,你可以通过点击Ctrl+输入它vEnter),或者保存自己只需键入 cat: 即可输入:%!cat -s
。
答案2
用于\n
指示搜索模式中的换行符。在替换文本中使用Ctrl+或反向引用。M看:help pattern
和:help sub-replace-special
(链接自:help :s
)。
%s/\(\n\n\)\n\+/\1/
答案3
如果在 Vim 中,只需执行以下操作:
:%!cat -s
标志-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