2015-04-29 60 views
0

我正在嘗試Google googles html,並解析出鏈接。我使用curl獲取html然後傳遞給gawk。從gawk我使用了match()函數,它可以工作,但它只返回少量的鏈接。最多10個。如果我在regex101.com上測試我的正則表達式,它會使用g全局修飾符返回51個鏈接。我如何在gawk中使用它來獲取所有鏈接(相對和絕對)?解析HTML與gawk的鏈接

#!/bin/bash 

html=$(curl -L "http://google.com") 

echo "${html}" | gawk ' 
    BEGIN { 
    RS=" " 
    IGNORECASE=1 
    } 
    { 
    match($0, /href=\"([^\"]*)/, array); 
    if (length(array[1]) > 0) { 
     print array[1]; 
    } 
    }' 

回答

1

相反的awk你也可以使用grep -oP

curl -sL "http://google.com" | grep -iPo 'href="\K[^"]+' 

但是這也取了我31頁的鏈接。這可能因您的瀏覽器而異,因爲google.com會針對不同位置/用戶簽名提供不同的頁面。

+0

感謝,但我得到'用法:grep'作爲輸出,它不跑? –

+0

嗯,你必須使用較老的grep。 'grep -P'需要較新的gnu grep – anubhava

+0

我有grep(BSD grep)2.5.1-FreeBSD –

1

匹配只匹配最左邊的匹配,您需要每次更新該行。

嘗試

curl -sL "http://google.com" | gawk '{while(match($0, /href=\"([^\"]+)/, array)){ 
     $0=substr($0,RSTART+RLENGTH);print array[1]}}'