繁体   English   中英

awk正则表达式不匹配时

[英]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

什么地方出了错

让我们一步一步地查看原始正则表达式, /:.+ \\(.[^)]*$/

  1. :意思是单个冒号

  2. .+表示任何一个或多个角色。 +表示一个或多个 。)

  3. 意思是一片空白

  4. \\(意思是一个公开的parens

  5. . 即任何字符之一

  6. [^)]*表示除了密切的parens之外的任何字符的零或更多 *表示零或更多 。)

  7. $表示该行的结尾。

问题是步骤5,它可以匹配a ) 在修订的正则表达式中,这被删除, [^)]*[^)]+替换。

. 之后\\(允许任何单个任意字符 - 包括) - 紧接在左括号之后。 如果那不是你想说的话,那就把它拿出去吧。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM