2013-10-05 33 views
0

的匹配部分我有這樣AWK - 如何獲得唯一一個正則表達式

echo abc | awk '$0 ~ "a\(b\)c" {print $0}' 

如果我只是想什麼括號,而不是整個行代碼?這顯然非常簡單,並且有很多awk代碼,所以我不想切換到sed或grep或其他東西。由於

+0

http://stackoverflow.com/questions/15136366/how-to-use-non-捕獲組在grep – aaronman

回答

3

據我知道你不能做到這一點在pattern的一部分,你必須與match()功能做到這一點action部分內:

echo abc | awk '{ if (match($0, /a(b)c/, a) > 0) { print a[1] } }' 

它產生:

b 
+0

+1,比我的gensub功能更好.. – Kent

+1

你絕對可以在動作部分之外做到這一點:http://stackoverflow.com/questions/2957684/awk-access-captured-group- from-line-pattern/4673336#4673336 –

+0

順便說一句,這是一個GNU awk擴展。 –

2

隨着GNU awk:

$ echo abc | awk '{print gensub(/a(b)c/,"\\1","")}' 
b 
+0

謝謝埃德,這是一個很好的選擇。 match()不適用於msysgit的gawk,所以我可能會使用類似於你的建議。 – user2672807