【发布时间】:2018-06-27 06:09:37
【问题描述】:
在 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 的对应物。
【问题讨论】:
-
虽然信息很有帮助。您能否提供一个实际示例输入和预期输出,以帮助我们更好地理解?
-
即使
line1也将满足负前瞻,即(?!local) -
请输入/输出示例
-
awk 不支持环视。我建议使用标志(stackoverflow.com/questions/38972736/…) 而不是
//,//语法... -
它确实提供了。你可以做
!/word1/ && !/word2/ && !/word3/
标签: regex awk regex-negation