我找到了关于如何删除三条空行的question and answer。但是,我只需要双空行。 IE浏览器。应完全删除所有双空行,但应保留单个空白行。
我知道一点sed,但建议删除三条空白行的命令在我脑海中:
sed '1N;N;/^\n\n$/d;P;D'
答案 0 :(得分:49)
使用cat
:
cat -s
答案 1 :(得分:11)
我评论了你不理解的sed
命令:
sed '
## In first line: append second line with a newline character between them.
1N;
## Do the same with third line.
N;
## When found three consecutive blank lines, delete them.
## Here there are two newlines but you have to count one more deleted with last "D" command.
/^\n\n$/d;
## The combo "P+D+N" simulates a FIFO, "P+D" prints and deletes from one side while "N" appends
## a line from the other side.
P;
D
'
删除1N
,因为我们只需要'堆叠'中的两行,然后使用第二行N
,并将/^\n\n$/d;
更改为/^\n$/d;
以删除所有两行空行。
测试:
infile
的内容:
1
2
3
4
5
6
7
运行sed
命令:
sed '
N;
/^\n$/d;
P;
D
' infile
产量:
1
2
3
4
5
6
7
答案 2 :(得分:7)
使用awk
:
awk -v RS='\n\n\n' 1
答案 3 :(得分:5)
sed '/^$/{N;/^\n$/d;}'
它只删除文件中的两个连续空行。您只能在文件中使用此表达式,然后才能完全理解。如果出现空白行,它将进入大括号。
通常sed会读一行。 N
会将第二行附加到模式空间。如果该行是空行。这两行都是换行符。
/^\n$/
此模式将匹配d
只能运行的时间。否则d
无法正常工作。 d
用于删除模式空间的整个内容,然后开始下一个循环。
答案 4 :(得分:1)
但是上述解决方案仅删除3个连续空白行的首次搜索。 要删除全部,请使用下面的命令
连续3行sed '1N;N;/^\n\n$/ { N;s/^\n\n//;N;D; };P;D' filename
答案 5 :(得分:-1)
但是上述解决方案仅删除3个连续空白行的首次搜索。要删除全部,请使用下面的命令
连续3行sed'1N; N; / ^ \ n \ n $ / {N; s / ^ \ n \ n //; N; D; }; P; D'文件名
答案 6 :(得分:-2)
只需将其传递给'uniq'命令,所有空行都将缩减到只有一行。更简单更好。
澄清:正如Marlar所说,如果你有“其他非空白的连续重复行”,你不想摆脱它,这不是一个解决方案。这个是在其他情况下的解决方案,比如在尝试清理配置文件时,这是我在看到这个问题时所遇到的解决方案。我只是使用'uniq'解决了我的问题。