2014-12-23 126 views
1

我在函數中有以下awk行。正則表達式與awk交替

match($0,/'(.*)'/,a) 

但是我想使它所以它將匹配'(.*)'"(.*)"。我曾嘗試用不同的替代語法編寫它,例如:

match($0,/'(.*)'|"(.*)"/,a) 

但是它不想工作。

只是想知道是否有人能指出這裏發生了什麼。

+1

我們通常可以爲您提供的更多信息提供更多幫助。例如,如果您告訴我們「它不想要工作」的方式(語法錯誤?意外的輸出?沒有輸出?其他?),併發布一些示例輸入和期望輸出,並告訴我們腳本是否在文件中或者從命令行執行,如果你在Windows或UNIX上以及你正在使用的是哪個版本的awk(gawk?mawk?別的東西?),那將是非常有用的。 –

回答

2

嘗試這樣做,如果它是一個awk腳本:

match($0, /['"](.*)['"]/, a) 

如果不是,(命令行):

match($0, /[\042\047](.*)[\042\047]/, a) 
+2

這將匹配不匹配引號的字符串。例如''abc''會匹配,你應該使用反向引用來安全地玩它。 –

+0

'awk'甚至支持反向引用嗎? –

+0

@MarkReed不,它不會。 –

3

您需要:

match($0,/\047([^\047]*)\047|"([^"]*)"/,a) 

a使得呆子-具體。如果您將腳本存儲在以awk -f script執行的文件中,則可以將\047 s更改爲' s。