2011-05-05 64 views
3

我使用的匹配()函数的gawk中抢出一个HTML文件的链接多..正则表达式是这样的:awk中匹配() - 每行

match($0, /(<a href=\")([^\"]+)/, arr) 

我不t似乎能够在最后使用“/ g”选项来获得每行多个匹配?

回答

5

这是正确的。 AWK正则表达式没有标志。
此外,没有内置的支持让match寻找第二次或以后的比赛。
只有gsubgensub函数有。
我想尝试这样的事:

gensub(/.*<a href=\"([^\"]+)/, "\1%", "g") 
last = split($0, "%", arr) 
delete arr[last] 

其中%是,你能保证不会在输入中找到的字符串。

1

文本模式浏览器lynx可能是一个更好的工具来收集URL。它的-dump标志将格式化输出写入标准输出。最后,您会在该页面上找到每个可见和隐藏链接的编号列表。 (或文件,它接受URL或文件名作为参数)。

$ lynx -dump http://www.stackoverflow.com 

[snip] 
References 

    Visible links 
    1. http://stackoverflow.com/opensearch.xml 
    2. http://stackoverflow.com/feeds 
    3. http://stackexchange.com/ 
    4. http://stackoverflow.com/users/login 
    5. http://careers.stackoverflow.com/ 
    6. http://chat.stackoverflow.com/ 
[snip] 
676. http://creativecommons.org/licenses/by-sa/3.0/ 
677. http://blog.stackoverflow.com/2009/06/attribution-required/ 

    Hidden links: 
678. http://www.peer1.com/stackoverflow 
679. http://creativecommons.org/licenses/by-sa/3.0/