多行html脚本中的awk的正则表达式

时间:2016-10-23 07:50:27

标签: html regex bash awk

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

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

我可以使用awk -F '[<>]' '/<td>/,/<\/td>/ {print $3}' test.html

但是,如果用这样的换行符分隔它怎么办呢?

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

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

awk -F '\n' '/<td>/,/<\/td>/ {print $2}' test.html

1 个答案:

答案 0 :(得分:1)

你错了:-)。永远不要使用范围表达式(/start/,/end/),因为它们使得琐碎的工作变得更加简单,但是对于任何有趣的事情都需要完全重写或重复的条件。始终使用标志(/start/{f=1} f; /end/{f=0})。

在这种情况下,没有一个是相关的,因为正确的方法来做你想要的是使用XML解析器,如果由于某种原因你无法做到这一点,那么你要做到这一点用于多字符RS的GNU awk:

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