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

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

问题或多或少说明了一切。我知道这/^$/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

标志-scat多个空白行压缩为一个。

答案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

相关内容