是否有正则表达式在awk中排除单词列表?

时间:2018-01-18 08:25:23

标签: regex awk regex-negation

在awk程序中,我尝试从包含<<<local>>>的行和包含模式<<<XXXX>>>的下一行中选择输入,其中 除了XXXX之外,local将是其他任何内容。

<<<local>>>
line1
line2
line3
<<<XXXX>>>

最简单的awk代码是

$0=="<<<local>>>",/^<<<XXXX>>>$/ { ··· }

XXXX应替换为正确的正则表达式以排除local

据我所知,这可以在python中完成

(?!local)

在Korn shell和其他shell中:

!(local)

但我在regex(7)手册页中没有发现这个问题。

为了绕过这个障碍我使用

$0=="<<<local>>>",/^<<<.+>>>$/ && $0!="<<<local>>>" { ··· }

但是我的这个问题的症结在于,awk正则表达式引擎接受某个单词列表排除,我的意思是,作为word1|word2|word3的对应物。

1 个答案:

答案 0 :(得分:0)

这会......

awk '/<<<local>>>/{f=1} f; /<<<.*>>>/ && !/<<<local>>>/{f=0}' file

如果您不想终止另一个字词的范围,可以添加到!/<<<(local|other)>>>/