我应该使用什么命令从以下html代码中提取文本,该代码位于“test.html”文件中,包含:“<span id="imAnID">extractme</span>
“?
文件会更大,所以我需要将grep或sed指向一个ID,然后告诉它只从具有此ID的标记中提取文本。假设我从文件所在的目录运行终端,我将执行以下操作:
cat test.html | sed -n 's/.*<span id="imAnID">\(.*\)<\/span>.*/\1/p'
我做错了什么?我得到了一个空的输出...如果使用grep更容易的话,我不反对使用grep。
4条答案
按热度按时间ogq8wdun1#
您可以尝试使用
awk
来代替:使用者:
r9f1avp52#
使用awk、sed或grep执行此操作很不方便,因为这些工具都是基于行的(一次一行)。是否可以保证您尝试提取的span都在同一行上?是否可以在span中使用其他标记(例如
em
标记)?如果不可以,那么这听起来像是perl的工作。llmtgqce3#
sed和grep是面向行的工具。XML和HTML是基于标记的。这两种工具不能很好地合并在一起,尽管您可以在使用面向行的工具之前,通过在XML或HTML上使用漂亮的格式化程序,在XML和HTML上使用awk、sed和grep。
有一个叫做xmlgawk的程序,它应该是非常像gawk的,同时仍然在处理XML。
我个人更喜欢在Python中使用lxml模块来完成这类工作,这样就可以完全理解XML/HTML而不会过于冗长。
stszievb4#
使用
grep -o
将发现:
如果携带期望的
id
属性的span
元素紧接在extractme
填充物之前出现,则它将起作用。