使用 unix 实用程序仅用 2 个换行符替换多个换行符
Replace multiple newlines with just 2 newlines using unix utilities
我试图寻找实现它的正确方法,从标准输入读取并打印到标准输出。我知道我可以使用 squeeze (-s) 来删除相同类型的多行,但我想保留两个换行符来代替许多行,而不仅仅是一个。我也研究过使用 uniq,但不确定如何使用。我知道也可以使用fold,但是找不到我想要的fold版本的任何信息,fold(1p)。
因此,如果我将文本作为输入:
A B C D
B C D E
我希望输出为
A B C D
B C D E
以下 awk
可能会对您有所帮助。
awk -v lines=$(wc -l < Input_file) 'FNR!=lines && NF{print [=10=] ORS ORS;next} NF' Input_file
或
awk -v lines=$(wc -l < Input_file) 'FNR!=lines && NF{[=11=]=[=11=] ORS ORS} NF' Input_file
你可以这样使用 awk:
awk 'BEGIN{RS="";ORS="\n\n"}1' file
RS
是输入记录分隔符,ORS
是输出记录分隔符。
来自 awk 手册:
If RS is null, then records are separated by sequences consisting of a newline plus one or more blank lines
这意味着上面的命令将输入文本拆分为两个或多个空行,然后再用两个换行符将它们连接起来。
我试图寻找实现它的正确方法,从标准输入读取并打印到标准输出。我知道我可以使用 squeeze (-s) 来删除相同类型的多行,但我想保留两个换行符来代替许多行,而不仅仅是一个。我也研究过使用 uniq,但不确定如何使用。我知道也可以使用fold,但是找不到我想要的fold版本的任何信息,fold(1p)。
因此,如果我将文本作为输入:
A B C D
B C D E
我希望输出为
A B C D
B C D E
以下 awk
可能会对您有所帮助。
awk -v lines=$(wc -l < Input_file) 'FNR!=lines && NF{print [=10=] ORS ORS;next} NF' Input_file
或
awk -v lines=$(wc -l < Input_file) 'FNR!=lines && NF{[=11=]=[=11=] ORS ORS} NF' Input_file
你可以这样使用 awk:
awk 'BEGIN{RS="";ORS="\n\n"}1' file
RS
是输入记录分隔符,ORS
是输出记录分隔符。
来自 awk 手册:
If RS is null, then records are separated by sequences consisting of a newline plus one or more blank lines
这意味着上面的命令将输入文本拆分为两个或多个空行,然后再用两个换行符将它们连接起来。