我正在寫awk中的一個解析器,以某種特別依賴於括號的文件格式。 對於我的腳本知道它是哪個部分,它需要能夠解釋他們以正確的方式文件的awk匹配具有「(」但不是「)」的行
一部分可能看起來像這樣
: (MyIntranet
:add_routed_domain()
如果一行包含「(」但沒有結尾「)」,這意味着我們已經開始了一個新的部分。 如果一行同時包含一個開始的「(」和一個結束的「)」,這意味着這行不會開始一個新的部分,它只是一個包含在「()」中的數據值的容器。爲了讓我的awk解析器理解差異,我試圖構造一個正則表達式來執行此操作:
如果我們有一行「(」在行上的任意位置,但行上的最後一個字符是不「)」 的部分,如果我們有「)」結束的行但沒有「(」上線結束
我讀到這裏:Regex to ensure a specific word does not occur in the middle of a pattern 那你CA n使用(WORD?!)不匹配WORD
我構建了一個正則表達式看起來像這樣:
\(.+(?!\))
我的信念是,這將匹配「(」和之後的任何字符,但如果最後一個字符是一個「)」
我已經把兩條線在名爲match3.input
[email protected]:~$ awk '/\(.+(?!\))/ { print $0 }' match3.input
[email protected]:~$
所以,很顯然,我做錯了什麼文件我希望上面的命令返回行:(?!)
: (MyIntranet
如果我刪除)表達式返回兩條線在awk
預期
[email protected]:~/bork$ awk '/\(.+/ { print $0 }' match3.input
: (MyIntranet
:add_routed_domain()
我想這適用於其他的兩個例子: – Johnathan
我想這適用於其他的兩個例子:匹配線那裏有一個「(」在他們的任何地方,但沒有「)」作爲最後一個字符。/[^(] * \)$ /但我想我錯過了一些東西。 – Johnathan
我的意思是匹配以「)」結尾的一行,但該行應該沒有「(」任何位置前的任何位置 – Johnathan