我需要提取文件中的特定 div 内容。
内容如下。
<div class="container">
<div class="row">
<div class="col-2">One of three columns</div>
<div class="col-6">
<p>One of three columns</p>
</div>
<div class="col-4">One of three columns</div>
</div>
</div>
需要提取以下内容。
<div class="col-6">
<p>One of three columns</p>
</div>
我尝试这样做。
cat test.html | tr -d '\n\t' | grep -o "<div class=\"col-6\">.*<\/div><div class=\"col-4\">"
返回如下。
<div class="col-6"><p>One of three columns</p></div><div class="col-4">
如何删除内容的前后部分?
<div class="col-6">...</div><div class="col-4">
先感谢您!
答案1
使用grep -A
$ grep -A 2 'class="col-6"' test.html | sed -n 2p
<p>One of three columns</p>
从man grep
:
-A NUM
,在匹配行之后--after-context=NUM
打印NUM
尾随上下文的行。
或使用awk
:
$ awk '/class="col-6"/{getline; print $0}' test.html
<p>One of three columns</p>
注意:仅当结构与您的测试输入完全相同时,此方法才有效。一般来说我会总是更喜欢合适的 xml / html 解析器。
例如:python
beautifulsoup
$ python3 -c '
from bs4 import BeautifulSoup
with open("test.html") as fp:
soup = BeautifulSoup(fp)
print(soup.findAll("div", {"class":"col-6"})[0].findAll("p")[0])'
<p>One of three columns</p>
或者xmlstarlet
像这样使用:
$ xmlstarlet sel -t -m '//div[@class="col-6"]' -c './p' -n test.html
<p>One of three columns</p>