[英]awk regexp when not match
在此之前我得到了一些帮助来构建一个正则表达式,该正则表达式匹配任何以“:”开头的行然后是任何东西,然后是“(”之后的任何内容,但它不能以“)结束”
我使用的正则表达式如下:
/:.+ \(.[^)]*$/
它看起来工作得相当好。 我有这个输入行:
:web_application_settings (
:isakmp.phase1_DH_groups (
:ike_p1 (
:ike_p1_dh_grp (ReferenceObject
:isakmpkeymanager (lalalal)
输出只是:: ike_p1_dh_grp(ReferenceObject
但后来我碰巧添加了这条线:
:isakmpkeymanager ()
这不应该匹配,但确实如此,我认为这很奇怪。 我在正则表达式中错过了什么,允许以“)”结尾的这一行仍然匹配,当我使用不匹配时:[^]]然后开始允许它不匹配然后结束行。
尝试:
awk '/:.+ \([^)]+$/' File
让我们一步一步地查看原始正则表达式, /:.+ \\(.[^)]*$/
:
:
意思是单个冒号
.+
表示任何一个或多个角色。 ( +
表示一个或多个 。)
意思是一片空白
\\(
意思是一个公开的parens
.
即任何字符之一
[^)]*
表示除了密切的parens之外的任何字符的零或更多 。 ( *
表示零或更多 。)
$
表示该行的结尾。
问题是步骤5,它可以匹配a )
。 在修订的正则表达式中,这被删除, [^)]*
被[^)]+
替换。
的.
之后\\(
允许任何单个任意字符 - 包括)
- 紧接在左括号之后。 如果那不是你想说的话,那就把它拿出去吧。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.