awk match() - 每行多个

时间:2011-05-05 16:26:23

标签: regex shell awk match gawk

我在gawk中使用match()函数从HTML文件中获取链接..正则表达式是这样的:

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

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

2 个答案:

答案 0 :(得分:5)

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

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

其中%是一个您可以保证在输入中找不到的字符串。

答案 1 :(得分: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/