如何仅删除单个空行 - 保留多个空行

Dom*_*red 4 linux bash awk sed

我有一些数据,我想保留多个空白行,只删除单个空白行.我的数据如下所示:

1

2

3

4


5


6

7

8



9

10
Run Code Online (Sandbox Code Playgroud)

我希望输出为:

1
2
3  
4


5


6
7
8



9
10
Run Code Online (Sandbox Code Playgroud)

我尝试使用以下命令,但我似乎无法让它工作:

awk ' /^$/ { print; } /./ { printf("%s ", $0); }'
Run Code Online (Sandbox Code Playgroud)

sed 'N;/^\n$/d;P;D'
Run Code Online (Sandbox Code Playgroud)

此外,我尝试使用,cat -s但不一定取出空白行.此外,我玩过sed '/^$/'但不能指定单行.任何帮助是极大的赞赏.

anu*_*ava 6

使用gnu-awk非常简单:

awk -v RS='\n+' '{printf "%s", $0 (length(RT) != 2 ? RT : "\n")}' file

1
2
3
4


5


6
7
8



9
10
Run Code Online (Sandbox Code Playgroud)
  • 使用-v RS='\n+'我们构成一个或多个换行符作为记录分隔符
  • 使用length(RT)我们检查每条记录后有多少换行符
  • 我们打印RT(原始捕获值)iflength != 2

替代awk命令:

awk -v RS='\n{3,}' '{gsub(/\n{2}/, "\n", $0); printf "%s", $0 RT}' file
Run Code Online (Sandbox Code Playgroud)

  • 非常好用`RT`! (2认同)