我刚学会了如何使用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
答案 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