用vim / sed中的单个空行替换多个空行

And*_*ter 52 vim sed regular-expression

问题或多或少说明了一切。我知道这/^$/d会删除所有空行,但我不知道怎么说“用一个空行替换两个或多个空行”

有任何想法吗?

Cal*_*leb 61

如果您不将 vim 或 sed 用于其他用途,则 cat 实际上有一个简单的内置方法来折叠多个空白行,只需使用cat -s.

如果您已经在 vim 中并想留在那里,您可以通过内部搜索来执行此操作并通过发出替换:(:%s!\n\n\n\+!^M^M!g^M 是换行符的视觉表示,您可以通过点击Ctrl+输入它vEnter),或者保存自己只需打字 cat: :%!cat -s

  • 将 `:%!cat -s` 标记为“获胜”。每天学点 GNnew! (4认同)
  • 我认为你也可以像这样使用 \r 而不是 ^M:`%s!\n\n\n\+!\r\r!g` (3认同)
  • 哇,不知道 cat 的 `-s` 选项 - 只是一个历史记录,它不在 POSIX 中,但似乎在 BSD 和 GNU cat 中可用。 (2认同)

Gil*_*il' 19

用于\n在搜索模式中指示换行符。在替换文本中使用Ctrl+M或反向引用。请参阅:help pattern:help sub-replace-special(链接自:help :s)。

%s/\(\n\n\)\n\+/\1/
Run Code Online (Sandbox Code Playgroud)


coa*_*nor 7

如果在 Vim 中,只需执行以下操作:

:%!cat -s
Run Code Online (Sandbox Code Playgroud)

-s用于cat将多个空行压缩为一个的标志。

  • 你可能想添加一些关于它是如何工作的细节,即使它只是来自`man`页面的引用。 (3认同)