2013-01-21 87 views
0

我有相當數量的圖像搜索結果,我想要將其轉換爲相當數量的實際圖像。提取與reg exp

所有的結果都是單個圖像的HTML頁面,並且每個文件包含子

<標題>谷歌 - Ergebnis毛皮[URI] </TITLE>

其中[URI]表示實際結果圖像的絕對URI(http:// ...(.gif | .jpg | .jpeg | .bmp))。

但我不明白如何提取uri將其交給wget。

cat imgres.html | grep「< title>」| SED的/ <標題>谷歌 - 獻給Ergebnis HTTP:(。*)// </TITLE>/\\ 1 /'

+0

我不知道很多關於'sed',但無論是在'HTTP://'和''你使用'/'這也是你的正則表達式的分隔符 - 你可以做到這一點?難道你不應該將它們作爲'http:\/\ /'和'<\/title>'來轉義嗎? – h2ooooooo

回答

2

你接近你的sed命令:

sed -n 's#<title>Google-Ergebnis für \(http://.*\)</title>#\1#p' imgres.html 

無需貓,grep的,雖然多個管道。

0

這個怎麼樣?我假設你的問題是你如何將你從grep/sed中提取的內容傳遞給wget

cat imgres.html | grep "<title>" | 
    sed 's#<title>Google-Ergebnis für \(http://.*\)</title>#\1#' | 
wget -i - 

更爲簡潔:

sed -n '/<title>/{s#.*<title>Google-Ergebnis für \(http://.*\)</title>.*#\1#;p}' imgres.html | 
    wget -i - 

注意使用#插件代替通常/作爲分隔符爲s

+0

你爲什麼串聯imgres.html什麼也沒有,然後有grep的對結果進行操作,而不是僅僅有grep的打開文件? –

+0

懶惰? :-)是的,我聽說過'貓'獎的無用用途;-)'但是我覺得太懶了,以至於混淆了OP的原始代碼。但謝謝你指出。 – Faiz

2

grep的應有助於在這種情況下:

....grep "<title>"|grep -Po "(?<=Google-Ergebnis für)[^<]*" 

測試

kent$ echo "<title>Google-Ergebnis für http://foo.bar.baz/blah.png</title>"|grep -Po "(?<=Google-Ergebnis für)[^<]*" 
http://foo.bar.baz/blah.png 

注意實際上,你可以在兩個grep的合二爲一。