如何在特定匹配后删除所有空行

如何在特定匹配后删除所有空行

我想要做的是删除特定匹配后的所有空行,甚至匹配本身。

原始文件:

 line 1
 random words

 [GROUP 1]
 example 1
 example 2
 example 3

 [TITLE]


 [TITLE 2]
 line 2
 line 3

 [GROUP 2]

 random text...

想要的结果:

 line 1
 random words

 [GROUP 1]
 example 1
 example 2
 example 3

 [TITLE 2]
 line 2
 line 3

 random text...

答案1

简单的sed解决方案:

sed -z 's/\[[^]]*\]\n\n\n*//g' file
  • -z- 将输入视为一组行,每行以零字节(ASCII“NUL”字符)而不是换行符结尾

或者更复杂的awk解决方案:

awk '/\[.+\]/{ r=$0; rn=NR; c=0; next }rn && NR-rn==++c{ 
         if(NF) { if(NR-ern!=1) print r; rn=0 } else { ern=NR; next } 
    }1' file

输出:

line 1
random words

[GROUP 1]
example 1
example 2
example 3

[TITLE 2]
line 2
line 3

random text...

相关内容