【问题标题】:Regex for awk in multiline html script多行 html 脚本中 awk 的正则表达式
【发布时间】:2017-03-05 04:29:52
【问题描述】:

我刚刚学会了如何使用 bash 从 html 脚本中提取数据,如下所示:

<td>hello</td> <td>whatsup</td>

我可以使用awk -F '[&lt;&gt;]' '/&lt;td&gt;/,/&lt;\/td&gt;/ {print $3}' test.html

但是,如果它用这样的换行符分隔,我该怎么做?

<td> hello </td> <td> whatsup </td>

通过教程我能想出的最好的代码是这个,它似乎不起作用。

awk -F '\n' '/&lt;td&gt;/,/&lt;\/td&gt;/ {print $2}' test.html

【问题讨论】:

  • 我建议使用 XML/HTML 解析器 (xmllint, xmlstarlet ...)。
  • 我正在尝试学习如何在不使用任何解析器的情况下自己解析 html。
  • 好的,我将使用解析器。我只是认为这不是正则表达式无法接受的复杂脚本。

标签: html regex bash awk


【解决方案1】:

你学错了:-)。永远不要使用范围表达式 (/start/,/end/),因为它们会使琐碎的工作稍微简单一些,但随后需要完全重写或复制任何甚至远程有趣的条件。始终使用标志 (/start/{f=1} f; /end/{f=0})。

但是,在这种情况下,这些都无关紧要,因为执行所需操作的正确方法是使用 XML 解析器,如果由于某种原因您不能这样做,那么您可以使用 GNU awk for multi -char RS:

awk -v RS='\\s*</td>' 'sub(/.*<td>\s*/,"")' file
hello
whatsup

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多