删除搜索模式后面的行,直到空行

删除搜索模式后面的行,直到空行

我一直在使用以下代码成功地00 PROGRAM在文件中的许多块中查找并删除该块的所有以下行,但保留该块的最后一行(如果它包含XYZ.

sed -n '/00 PROGRAM/,/^$/{/./{h;d}; x;/XYZ/p}' file 

现在我需要相反的。我需要找到Group cat并仅删除该块的以下行,直到它到达下一个空/空白行。初始的pattern需要保留在文件中。空行必须保留在文件中。其他文本行也需要保留在文件中。任何人都可以建议更改此结构以使其正常工作,或者建议新的代码行吗?

代码运行之前:

 Group cat
 Group div
 Group member1
 Group member2
 Group select
      <empty line>
Common cat
Last update

代码运行后:

Group cat
     <empty line>
Common cat
Last update

然后它将搜索下一个模式匹配并删除该块中的行等等。

答案1

以下产生所需的输出:

sed -e '/Group cat/,/^$/{//b' -e '/./d;}' file

在第一Group cat行,b将执行命令,从而分支到脚本末尾并打印该行(默认操作)。

在直到下一个空行的所有其他行上,该d命令都将被执行,但不会在空行本身上执行。

相关内容