2015-04-29 33 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]}}'