我有一个文件 - 一个,并且存在一些继续空行(多个),见下文:
cat a
1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)
所以首先我想知道是否存在继续空行,我试过了
cat a | grep '\n\n\n'
Run Code Online (Sandbox Code Playgroud)
没什么输出.所以我必须使用以下方式
vi a
:set list
/\n\n\n
Run Code Online (Sandbox Code Playgroud)
所以我想知道是否存在其他shell命令可以轻松实现这个?然后,如果存在两个或更多的空行我想将它们转换为一个?见下文
1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)
起初我试过下面的shell
sed 's/\n\n\(\n\)*/\n\n/g' a
Run Code Online (Sandbox Code Playgroud)
它不起作用,然后我尝试了这个shell
cat a | tr '\n' '$' | sed 's/$$\(\$\)*/$$/g' | tr '$' '\n'
Run Code Online (Sandbox Code Playgroud)
这次它有效.而且我想知道是否存在其他方式可以实现这一点?
好吧,如果你的cat
实现支持
-s, --squeeze-blank
suppress repeated empty output lines
Run Code Online (Sandbox Code Playgroud)
那就简单了
$ cat -s a
1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)
此外,编号行-s
和-n
编号行也可以使用less
命令.
注释:不会抑制仅包含空格的行.
如果您cat
不支持,-s
那么您可以使用:
awk 'NF||p; {p=NF}'
Run Code Online (Sandbox Code Playgroud)
或者如果你想在每条记录后保证一个空行,包括在输出结尾,即使输入中没有,那么:
awk -v RS= -v ORS='\n\n' '1'
Run Code Online (Sandbox Code Playgroud)
如果您的输入包含所有空白行的行,并且您希望它们像非空白行一样被处理(如同cat -s
,请参阅下面的注释),然后:
awk '/./||p; {p=/./}'
Run Code Online (Sandbox Code Playgroud)
并保证输出结尾处有一个空行:
awk '/./||p; {p=/./} END{if (p) print ""}'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
154 次 |
最近记录: |