![sed 语法删除 xml](https://linux22.com/image/1268492/sed%20%E8%AF%AD%E6%B3%95%E5%88%A0%E9%99%A4%20xml.png)
我正在尝试从元数据中清理这个输出以将其插入到 GreekTools 中,但我被 sed 难住了。
curl --silent www.brainyquote.com | egrep '(span class="body")|(span class="bodybold")' | sed -n '6p; 7p; ' | sed 's/\<*\>//g'
[前任]
<span class="body">Literature is news that stays news.</span><br>
<span class="bodybold">Ezra Pound</span>
有人能帮助我走这条路吗?
答案1
你确实应该使用合适的 HTML 或 XML 解析工具。尝试使用正则表达式解析它会导致疯狂。
但是,对于简单的情况:
curl --silent www.brainyquote.com | egrep 'span class="body' | sed -n '6,7{s/<[^>]*>//g;p}'
对于 OS X:
curl --silent www.brainyquote.com | egrep 'span class="body' | sed -n '6,7{' -e 's/<[^>]*>//g' -e 'p' -e '}'
这对 mjb 有用:
curl --silent www.brainyquote.com | egrep '(span class="body")|(span class="bodybold")' | sed -n '6p; 7p; ' | sed -e 's/<[^>]*>//g'
答案2
为了完整性,使用 HTML tidy 和 xmlstarlet 的解决方案:
# note: use recent versions of tidy and xmlstarlet
curl -s www.brainyquote.com |
tidy -q -c -wrap 0 -numeric -asxml -utf8 --merge-divs yes --merge-spans yes 2>/dev/null |
xmlstarlet sel -N x="http://www.w3.org/1999/xhtml" -T -t -m "//x:td[@align='center' and @valign='top' and @width='300']/x:span[@class='body']" -v '.' -n \
-m "//x:html/x:body/x:div/x:table/x:tr[position()=2]/x:td[@align='center' and @valign='top' and @width='300']/x:span[@class='bodybold']" -v '.' -n