将两个空白行合并为一个

Dan*_*iel 3 bash sed

我正在寻找将文件A转换为文件B的解决方案,这需要将两个空白行合并为一个。

文件A:

// Comment 1
// Comment 2

// Comment 3


// Comment 4



// Comment 5
Run Code Online (Sandbox Code Playgroud)

文件B:

// Comment 1
// Comment 2

// Comment 3

// Comment 4

// Comment 5
Run Code Online (Sandbox Code Playgroud)

这篇文章中,我知道如何删除空行,我想知道如何将两个连续的空行合并为一个。

PS:空白表示它可能为空,或者该行中可能有制表符或空格。

pot*_*ong 6

这可能对你有用(GNU sed):

sed '$!N;s/^\s*\n\s*$//;P;D' file
Run Code Online (Sandbox Code Playgroud)

这会将 2 个空行转换为 1 个。

如果要将多个空行替换为一个:

sed ':a;$!N;s/^\s*\n\s*$//;ta;P;D' file
Run Code Online (Sandbox Code Playgroud)

经过反思,一个更简单的解决方案是:

sed ':a;N;s/\n\s*$//;ta' file
Run Code Online (Sandbox Code Playgroud)

它将一个或多个空行压缩为一个空行。

更简单的解决方案使用范围条件:

sed '/\S/,/^\s*$/!d' file
Run Code Online (Sandbox Code Playgroud)

这将删除除非空行后面的空行之外的所有空行。


Bar*_*mar 5

sed -r 's/^\s+$//' infile | cat -s > outfile
Run Code Online (Sandbox Code Playgroud)

sed删除空白行上的所有空格。将连续的空白行压缩为一个的-s选项cat