gpt4 book ai didi

shell - 如何找到连续的空白行并将其转换为一个

转载 作者:行者123 更新时间:2023-12-02 18:14:56 24 4
gpt4 key购买 nike

我有一个文件--a,并且存在一些连续的空行(多个),见下文:

cat a
1

2


3



4

5

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

cat a | grep '\n\n\n'

没有任何输出。所以我必须使用以下方式

vi a 
:set list
/\n\n\n

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

1

2

3

4

5

首先我尝试在 shell 下

sed 's/\n\n\(\n\)*/\n\n/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 也可能适用于 less 命令。

备注:仅包含空格的行不会被抑制。

如果您的cat不支持-s那么您可以使用:

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

或者,如果您想保证每条记录后都有一个空行,包括在输出末尾,即使输入中不存在空行,则:

awk -v RS= -v ORS='\n\n' '1'

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

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

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

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

关于shell - 如何找到连续的空白行并将其转换为一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45549402/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com