2015-04-27 56 views
2

考慮包含以下文本命名test一個簡單的文件:爲什麼我需要在awk字符串常量中隱藏圓括號?

abc(def) 

隨着awk,如果我發現了,這將工作:

awk '$0 ~ "abc\(def\)"' test 

但如果括號不是它不會工作正確逃脫:

awk '$0 ~ "abc(def)"' test 

刪除右括號,我得到這個錯誤:

awk: line 1: regular expression compile failed (missing ')') 
abc(def 

是不是由字符串引用"" awk中的字符串常量?爲什麼()在字符串常量中被當作正則表達式特殊字符?

回答

2

當GAWK here的文件看,它說(重點煤礦)

Regexp matching and non-matching are also very common expressions. The left operand of the ~ and !~ operators is a string. The right operand is either a constant regular expression enclosed in slashes (/regexp/), or any expression, whose string value is used as a dynamic regular expression (see section Using Dynamic Regexps).

運行腳本和程序的運行過程中不能被改變時創建

正則表達式常量,而動態的正則表達式由劇本改變。

+0

謝謝。我沒有意識到我對'〜'的理解是不準確的。我應該考慮一下。 – Naitree

+1

這是我從這裏的一些答案中學到的一件事情:你應該經常檢查文檔,這裏主要解釋了那裏,儘管我一開始並不相信。 – martin

+0

這是對的,至少在理論上。但有時很難猜測你的理解的哪一部分與事實不符,在這種情況下,你會盲目地找到文檔的正確部分。 – Naitree

相關問題