2013-10-07 120 views
0

我堅持AWKawk的匹配模式

我有以下結構

<package author=".." label=".." url=".."> 
<package author=".." label=".." url=".."> 
... 
<package author=".." label=".." url=".."> 

文件作爲輸出我想要得到的只是網址

列表

如何用awk做到這一點。

我認爲它應該像

awk '/url="(.*)"/{print $0}' 123 

但是它不工作。

謝謝。

+0

'我堅持awk' - 你能告訴我們你是怎麼堅持?你到目前爲止嘗試了什麼? – devnull

+0

'sub'功能? –

回答

2

如果你想拿到url值,grep可以成爲您的朋友:

$ cat a 
<package author=".." label=".." url="thisis an url"> 
<package author=".." label=".." url="hello"> 
$ grep -Po '(?<=url=\")[^"]+' a 
thisis an url 
hello 

這將顯示包含一切FR om url="(不含稅),直到找到雙引號"

0

您的awk命令僅對包含給定模式的行進行過濾(url=...);因爲你所有的行都包含字符串,它會給你所有的行。 爲了提取信息,你可以不喜歡沿着雙引號分手了第4列,如:使用sed

awk '/url="(.*)"/{split($4, A, "\""); print A[2]}' 

也許更容易:

sed -e 's|^.*url="\([^"]*\)".*$|\1|g' 
+0

這可以縮短一些'awk'/ url/{split($ 4,A,「\」「); print A [2]}'' – Jotne

2

隨着GNU AWK:

awk '{print gensub(/.*url="([^"]+).*/,"\\1","")}' file 
0

另一個awk

cat file 
<package author=".." label=".." url="https://www.cisco.com"> 
<package author=".." label=".." url="http://www.google.com/search"> 

awk -F\" '/url/ {print $2}' RS=" " file 
https://www.cisco.com 
http://www.google.com/search 
0
perl -lne 'print $1 if(/url=\"([^\"]*)\"/)' your_file