我一直在使用以下代码成功地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
命令都将被执行,但不会在空行本身上执行。