![](/img/trans.png)
[英]extract text from between html tags with specific id using sed or grep
[英]Extract Text between HTML tags with sed or grep
我有个问题。 我想使用 sed 或 grep 命令获取此 html 的两个部分的值。 我如何提取它们?
测试.html:
<html>
<body>
<div id="foo" class="foo">
Some Text.
<p id="author" class="author">
<br>
<a href="example.com">bar</a>
</p>
</div>
</body>
</html>
脚本.sh
#!/bin/bash
author=$(sed 's/.*<p id="author" class="author"><br><a href="*">\(.*\)<\/a><\/p>.*/\1/p' test.html)
quote=$(sed 's/.*<div id="foo" class="foo">\(.*\)<\/div>.*/\1/p' test.html)
在线下我只想要值中的文本。 没有html标签。 但是我的脚本确实有效..
text="$(sed 's:^ *::g' < test.html | tr -d \\n)"
author=$(sed 's:.*<p id="author" class="author"><br><a href="[^"]*">\([^<]*\)<.*:\1:' <<<"$text")
quote=$(sed 's:.*<div id="foo" class="foo">\([^<]*\)<.*:\1:' <<<"$text")
echo "'$author' '$quote'"
$text
被分配了一个未缩进的单行表示test.html
; 请注意, :
用作sed
的定界符而不是/
,因为任何字符都可以作为定界符,并且我们正在解析的文本存在/
-s,因此我们不必使用\
-s 来转义它们构建正则表达式。$author
假定在<p id="author" class="author"><br><a href="[^"]*">
(其中[^"]*
表示 «除"
之外的任何字符,重复N 次,N ∈ [0, +∞)») 和接下来出现的任何标签。$quote
假定在<div id="foo" class="foo">
和接下来的任何标签之间。<<<"$text"
就是所谓的here-string ,它几乎等同于echo "$text" |
放在开头。你可以使用html2text
# cat test.html | html2text
Some Text.
[bar](example.com)
我经常使用 curl
# curl -s http://www.example.com/ | html2text
# Example Domain
This domain is for use in illustrative examples in documents. You may use this
domain in literature without prior coordination or asking for permission.
[More information...](https://www.iana.org/domains/example)
#
您可以使用xmllint来解析 html/xml 文本并为定义的 xpath 提取值。
这是工作示例:
#!/bin/bash
author=$(xmllint --html --xpath '//div[@class="foo"]/text()' test.html | tr -d '\n' | sed -e "s/ //g")
quote=$(xmllint --html --xpath '//a/text()' test.html | sed -e "s/ //g")
echo "Author:'$author'"
echo "Quote:'$quote'"
请不要使用正则表达式来解析 HTML/XML ,而是使用像xidel这样的专用解析器:
$ xidel -s test.html -e '//p/a,//div/normalize-space(text())'
bar
Some Text.
$ eval $(xidel test.html -se 'author:=//p/a,quote:=//div/normalize-space(text())' --output-format=bash)
$ printf '%s\n' "$author" "$quote"
bar
Some Text.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.