我应该使用什么命令从以下html代码中提取文本,该代码位于包含“<span id="imAnID">extractme</span>
”的“test.html”文件中?
文件会更大,所以我需要将grep或sed指向id,然后告诉它只从具有此ID的标签中提取文本。 假设我从文件所在的目录运行终端,我这样做:
cat test.html | sed -n 's/.*<span id="imAnID">\(.*\)<\/span>.*/\1/p'
我做错了什么?我得到一个空的输出...... 如果它更容易,不要反对使用grep。
答案 0 :(得分:0)
您可以尝试使用awk
代替:
#!/bin/bash
start_tag="span id=\"imAnID\""
end_tag="/span"
awk -F'[<>]' -v taga="$start_tag" -v tagb="$end_tag" '{ i=1; while (i<=NF) { if ($(i)==taga && $(i+2)==tagb) { print $(i+1) }; i++} }'
通过以下方式使用:
$ ./script < infile > outfile
答案 1 :(得分:0)
使用grep -o
echo "<span id="imAnID" hello>extractme</span> <span id='imAnID'>extractmetoo</span>" | grep -oE 'id=.?imAnID[^<>]*>[^<>]+' | cut -d'>' -f2
会找到:
#=>extractme
#=>extractmetoo
如果带有所需span
属性的id
元素紧跟在extractme
之前,它将起作用。
答案 2 :(得分:0)
使用awk,sed或grep是很尴尬的,因为这些工具是基于行的(一次一行)。是否保证您尝试提取的范围都在同一条线上?是否有可能在范围内使用其他标签(例如em
标签)?如果没有,那么这听起来像是perl的工作。
答案 3 :(得分:0)
awk,sed和grep是面向行的工具。 XML和HTML基于标签。虽然你可以通过使用XML或HTML上的漂亮格式化程序来使用awk,sed和grep来处理XML或HTML,但这两者并没有很好地结合起来。
有一个名为xmlgawk的程序应该是非常类似于gawk的,同时还在使用XML。
我个人更喜欢使用lxml模块在Python中执行此类操作,以便可以完全理解XML / HTML而不会过于冗长。