说我们得到了一个示例文件:awk的排除范围模式,但包括启动模式
11
12
ss
dd
gg
32
ss
dd
gg
所以我想删除它满足模式SS GG块,但我想保持启动模式SS
的出放应
11
12
ss
32
ss
使用此代码
awk '/ss/,/gg/{next}1' file
它也不包括开始模式ss
。我们怎么能保留它?
说我们得到了一个示例文件:awk的排除范围模式,但包括启动模式
11
12
ss
dd
gg
32
ss
dd
gg
所以我想删除它满足模式SS GG块,但我想保持启动模式SS
的出放应
11
12
ss
32
ss
使用此代码
awk '/ss/,/gg/{next}1' file
它也不包括开始模式ss
。我们怎么能保留它?
我会用一个打印标志是这样的:
$ 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}
当发现文本gg
时,取消设置flag
。使用sed
你可以这样做:
sed '/ss/,/gg/{/ss/!d;}' file
11
12
ss
32
ss
这sed
将删除模式ss
到gg
除非线是ss
使用!d
命令行。
这很酷,做得很好! – fedorqui