我在此之前得到了一些帮助来构建一个正则表达式,该正则表达式匹配任何以"开头的行:"然后是任何东西,然后是"("之后的任何东西,但它不能以&#34结束;)"
我使用的正则表达式是:
/:.+ \(.[^)]*$/
它看起来工作得相当好。我有这个输入行:
:web_application_settings (
:isakmp.phase1_DH_groups (
:ike_p1 (
:ike_p1_dh_grp (ReferenceObject
:isakmpkeymanager (lalalal)
输出只是:: ike_p1_dh_grp(ReferenceObject
但后来我碰巧添加了一行:
:isakmpkeymanager ()
这不应该匹配,但确实如此,我认为这很奇怪。我在正则表达式中错过了什么,允许这一行结束于")"仍然匹配,当我使用时不匹配:[^]]然后开始允许它不匹配然后结束。
答案 0 :(得分:2)
尝试:
Always
让我们一步一步地看看原始正则表达式awk '/:.+ \([^)]+$/' File
:
/:.+ \(.[^)]*$/
表示单个冒号
:
表示任何字符的一个或多个。 (.+
表示一个或多个。)
+
表示一个空白
表示一个打开的parens
\(
表示任何字符的一个
.
表示零或更多除了密切关注之外的任何字符。 ([^)]*
表示零或更多。)
*
表示该行的结尾。
问题是第5步可以匹配$
。在修订后的正则表达式中,此项已被删除,)
已替换为[^)]*
。
答案 1 :(得分:1)
.
之后的\(
允许任何单个任意字符 - 包括)
- 紧接在左括号之后。如果这不是你想说的话,那就把它拿出来。