加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

shell – 如何查找连续的空行并将其转换为空行

发布时间:2020-12-16 01:50:52 所属栏目:安全 来源:网络整理
导读:我有一个文件 – 一个,并且存在一些继续空行(多个),见下文: cat a12345 所以首先我想知道是否存在继续空行,我试过了 cat a | grep 'nnn' 没什么输出.所以我必须使用以下方式 vi a :set list/nnn 所以我想知道是否存在其他shell命令可以轻松实现这个?
我有一个文件 – 一个,并且存在一些继续空行(多个),见下文:

cat a
1

2


3



4

5

所以首先我想知道是否存在继续空行,我试过了

cat a | grep 'nnn'

没什么输出.所以我必须使用以下方式

vi a 
:set list
/nnn

所以我想知道是否存在其他shell命令可以轻松实现这个?
然后,如果存在两个或更多的空行我想将它们转换为一个?见下文

1

2

3

4

5

起初我试过下面的shell

sed 's/nn(n)*/nn/g' a

它不起作用,然后我尝试了这个shell

cat a | tr 'n' '$' | sed 's/$$($)*/$$/g' | tr '$' 'n'

这次它有效.而且我想知道是否存在其他方式可以实现这一点?

解决方法

好吧,如果你的cat实现支持

-s,--squeeze-blank
          suppress repeated empty output lines

那就简单了

$cat -s a
1

2

3

4

5

此外,编号行的-s和-n也可能在命令较少的情况下可用.

注释:不会抑制仅包含空格的行.

如果你的猫不支持-s那么你可以使用:

awk 'NF||p; {p=NF}'

或者如果你想在每条记录后保证一个空行,包括在输出结尾,即使输入中没有,那么:

awk -v RS= -v ORS='nn' '1'

如果您的输入包含所有空白行的行,并且您希望它们被视为非空白行(如cat -s,请参阅下面的注释),然后:

awk '/./||p; {p=/./}'

并保证输出结尾处有一个空行:

awk '/./||p; {p=/./} END{if (p) print ""}'

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读