【问题标题】:Retrieve information Text/Word from HTML code using awk/sed使用 awk/sed 从 HTML 代码中检索信息 Text/Word
【发布时间】:2014-05-24 21:23:51
【问题描述】:

awk/sed 新手在这里。我有一个 HTML 文件,我想从该文件中检索一个文本词。

<font face=arial size=-1><li><a href=/value_for_clients/Tokyo/abc_process.txt>abc</a> NDK Version:  4.0 </li>
<font face=arial size=-1><li><a href=/value_for_clients/Tokyo/abc01_process.txt>abc01</a> NDK Version:  4.0 </li>
<font face=arial size=-1><li><a href=/value_for_clients/Tokyo/abc045_process.txt>abc045</a> NDK Version:  4.0 </li>
<font face=arial size=-1><li><a href=/value_for_clients/Tokyo/cdf_process.txt>cdf</a> NDK Version:  4.0 </li>
<font face=arial size=-1><li><a href=/value_for_clients/Tokyo/Manhattan_process.txt>Manhattan</a> NDK Version:  4.0 </li>

例如。从第一行我想检索 abc 放置在: .txt>abc/a>

之间

我使用了以下命令,但您可以看到单词中的字母数量不断变化 abc、abc01、abc045、cdf、Manhattan。

awk -F\/ '{print substr($4,0,3)}' list.html

因此,此命令仅获取 3 个字母单词的输出。但是,我想从 HTML 代码中的所有行中提取相同的信息(abc01、abc045、cdf、Manhattan)。请帮忙。

【问题讨论】:

    标签: sed awk


    【解决方案1】:

    使用awk

    awk -F'[<>]' '{print $7}' urls 
    abc
    abc01
    abc045
    cdf
    Manhattan

    【讨论】:

    • 当我运行这个命令时,我得到了 html 文件中的行数乘以空行。什么都没有显示(awk -F'[]' '{print $7}' list.html)。当我尝试运行 John1024 提到的 awk 命令 (awk -F'(txt>|)' '{print $2}' list.html) 时,也会发生同样的事情。有什么想法吗?
    • 您的操作系统和 awk 版本是什么?如果您只是将上面粘贴的代码复制到文件中,它是否有效:这就是我们所做的......
    • 我在 Solaris 10 上运行它。“将上面粘贴的代码复制到文件中”?您要我将“awk -F'[]''{print $7}' list.html”复制到文件中并从那里执行吗?
    • 否:我试图确定您的源数据是否与您在问题中发布的数据有任何不同。
    • 不,没有什么不同。事实上,我再次尝试将上面提到的代码复制到一个新文件并运行它,但我仍然得到 5 个空行。所以它正在运行一些东西,但没有显示输出。
    【解决方案2】:

    你可以试试:

    perl -nE '/<a href.*?>(.*?)<\/a>/; say $1' file
    

    输出:

    abc
    abc01
    abc045
    cdf
    Manhattan
    

    【讨论】:

      【解决方案3】:
      $ sed -n 's/.*txt>\([[:alnum:]]\+\)<.*/\1/p' list.html
      abc
      abc01
      abc045
      cdf
      Manhattan
      

      或者:

      $ awk -F'(txt>|</a)' '{print $2}' list.html
      abc
      abc01
      abc045
      cdf
      Manhattan
      

      【讨论】:

        【解决方案4】:

        我使用命令 sedawk 来提取它。在这里,我将原始数据保存到文件/tmp/html.txt

        它们都使用正则表达式反向引用

        通过 sed

        flying@lempstacker:~$ sed -r -n 's@.*<a [^>]*>(.*)</a>.*@\1@p' /tmp/html.txt
        abc
        abc01
        abc045
        cdf
        Manhattan
        flying@lempstacker:~$
        

        通过 awk

        使用函数gensub

        flying@lempstacker:~$ awk '{print gensub(/.*<a [^>]*>(.*)<\/a>.*/,"\\1"," ",$0)}' /tmp/html.txt
        abc
        abc01
        abc045
        cdf
        Manhattan
        flying@lempstacker:~$
        

        【讨论】:

          【解决方案5】:

          使用 gnu grep

          grep -Po "<a href.*?>\K[^<]*" file
          

          【讨论】:

            猜你喜欢
            • 2020-01-19
            • 2020-09-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-08-02
            • 2016-04-07
            • 2011-03-26
            • 2018-12-16
            相关资源
            最近更新 更多