【问题标题】:Awk match() - multiple per lineawk match() - 每行多个
【发布时间】:2011-05-05 16:26:22
【问题描述】:

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

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

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

【问题讨论】:

    标签: regex shell awk match gawk


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      文本模式浏览器 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/
      

      【讨论】:

        猜你喜欢
        • 2017-03-26
        • 2010-11-10
        • 1970-01-01
        • 2023-02-11
        • 1970-01-01
        • 1970-01-01
        • 2022-08-23
        • 1970-01-01
        • 2012-06-10
        相关资源
        最近更新 更多