不匹配时的awk regexp
在此之前,我得到了一些帮助来构造一个regexp,它可以匹配以“:“然后是anything,然后是a”(“之后是anything,但不能以a结尾”)开头的任何行 我使用的regexp是:不匹配时的awk regexp,awk,Awk,在此之前,我得到了一些帮助来构造一个regexp,它可以匹配以“:“然后是anything,然后是a”(“之后是anything,但不能以a结尾”)开头的任何行 我使用的regexp是: /:.+ \(.[^)]*$/ 它似乎运行得相当好。我有以下输入行: :web_application_settings ( :isakmp.phase1_DH_groups ( :ike_p1 ( :ike_p1_dh_grp (ReferenceObject :isakmpkeymanager (lala
/:.+ \(.[^)]*$/
它似乎运行得相当好。我有以下输入行:
:web_application_settings (
:isakmp.phase1_DH_groups (
:ike_p1 (
:ike_p1_dh_grp (ReferenceObject
:isakmpkeymanager (lalalal)
并且输出仅为::ike_p1_dh_grp(ReferenceObject
但后来我碰巧加了一句话:
:isakmpkeymanager ()
这不应该匹配,但它确实匹配,这我觉得很奇怪。当我使用“不匹配:[^)]后接“开始”以允许它不匹配,然后是“结束”时,我在regexp中错过了什么,使以“)”结尾的行仍然匹配。尝试:
awk '/:.+ \([^)]+$/' File
出了什么问题
让我们看一下原始正则表达式,/:.+\(.[^)]*$/
,一步一步:
:
表示单个冒号+
表示任何字符中的一个或多个。(+
表示一个或多个。)
表示一个空白\(
表示一个打开的参数
表示任意字符之一[^)]*
表示除结束符以外的任何字符的零个或多个。(*
表示零或更多。)$
表示行尾问题出在步骤5,它可以匹配
)
。在修订后的正则表达式中,这一点被消除,并将[^]*
替换为[^]+
在\(
允许任何单个任意字符-包括)
-紧跟在括号后面。如果那不是你想说的,就把它拿出来