sed 可以删除连续的换行符吗?

sed 可以删除连续的换行符吗?

我有一个有很多空行的文档。

当两个或多个在一起时如何删除它们?

我尝试了sed "s/\n\n//"文件,没有成功。没有错误。

答案1

sed '/^$/d'

sed是面向行的,因此可以考虑“2个或更多特定字节”,除了当该字节是换行符时。然后你必须想出一些适用于整条生产线的方法。

答案2

不需要sedgrep会做:

grep .

(即grep,SPC,点,即匹配任何包含至少一个字符的行)。

还有:

tr -s '\n'

(将任何换行符序列压缩为一个)。

正如 Chris 所指出的,两者并不等同,因为删除空行(如上面的第一个解决方案和大多数其他答案集中在此处)与在第一行为空的情况下按要求压缩换行符序列不同。只需要前导换行符使第一行为空。

答案3

如果您想为任何给定的空行序列保留一个空行,您可以这样做:

sed -e '/./b' -e :n -e 'N;s/\n$//;tn'

答案4

对于大多数此类答案,首先需要删除尾随空格。删除双倍换行符会删除所有空白行。(想一想)。

从字面上解释,OP 希望“如果存在重复的空行,则从文件中删除所有空行”。

典型的用户希望“仅删除重复的空白行”。

为此,首先删除尾随空白,然后通过 cat -s 进行管道传输

sed  s/[[:space:]]*$// | cat -s

然而,这不会删除多余的前导或尾随空白行。

相关内容