假设我们有一个示例文件:
mov dl, [rax]
mov [rbx], dl
所以我想删除符合模式ss gg的块,但我想保留启动模式ss
输出应该是
rbx
使用此代码
rcx
它还排除了起始模式11
12
ss
dd
gg
32
ss
dd
gg
。我们怎么能保留它?
答案 0 :(得分:3)
我会使用这样的印刷标志:
$ awk '!flag; /ss/ {flag=1} /gg/ {flag=0}' file
11
12
ss
32
ss
这使用与How to select lines between two marker patterns which may occur multiple times with awk/sed类似的逻辑,以一种使打印开始模式的方式移动标记。
!flag
因为变量的默认值是0
,否则它会使其成立。这样,我们就会有一个默认的True值,触发awk
的默认操作:print $0
。/ss/ {flag=1}
在找到文字flag
时设置ss
。/gg/ {flag=0}
后,flag
取消设置gg
。答案 1 :(得分:3)
使用sed
即可:
sed '/ss/,/gg/{/ss/!d;}' file
11
12
ss
32
ss
此sed
删除了从模式ss
到gg
的所有行,除非使用ss
命令行!d
。