awk regexp不匹配时

时间:2016-10-29 06:28:25

标签: awk awk-formatting

我在此之前得到了一些帮助来构建一个正则表达式,该正则表达式匹配任何以"开头的行:"然后是任何东西,然后是"("之后的任何东西,但它不能以&#34结束;)"

我使用的正则表达式是:

/:.+ \(.[^)]*$/

它看起来工作得相当好。我有这个输入行:

:web_application_settings (
:isakmp.phase1_DH_groups (
:ike_p1 (
:ike_p1_dh_grp (ReferenceObject
:isakmpkeymanager (lalalal)

输出只是:: ike_p1_dh_grp(ReferenceObject

但后来我碰巧添加了一行:

:isakmpkeymanager ()

这不应该匹配,但确实如此,我认为这很奇怪。我在正则表达式中错过了什么,允许这一行结束于")"仍然匹配,当我使用时不匹配:[^]]然后开始允许它不匹配然后结束。

2 个答案:

答案 0 :(得分:2)

尝试:

Always

出了什么问题

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

  1. /:.+ \(.[^)]*$/表示单个冒号

  2. :表示任何字符的一个或多个。 (.+表示一个或多个。)

  3. +表示一个空白

  4. 表示一个打开的parens

  5. \(表示任何字符的一个

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

  7. *表示该行的结尾。

  8. 问题是第5步可以匹配$。在修订后的正则表达式中,此项已被删除,)已替换为[^)]*

答案 1 :(得分:1)

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