Como extrair conteúdo div usando grep?
Aug 24 2020
Eu preciso extrair conteúdo div específico dentro do arquivo.
O conteúdo é o seguinte.
<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>
O seguinte conteúdo precisa ser extraído.
<div class="col-6">
<p>One of three columns</p>
</div>
Eu tento fazer isso.
cat test.html | tr -d '\n\t' | grep -o "<div class=\"col-6\">.*<\/div><div class=\"col-4\">"
Retorne da seguinte forma.
<div class="col-6"><p>One of three columns</p></div><div class="col-4">
Como removo as partes antes e depois do conteúdo?
<div class="col-6">...</div><div class="col-4">
Agradeço antecipadamente!
Respostas
3 pLumo Aug 24 2020 at 15:16
Usargrep -A
$ grep -A 2 'class="col-6"' test.html | sed -n 2p
<p>One of three columns</p>
De man grep:
-A NUM,--after-context=NUM
ImprimaNUMlinhas de contexto à direita após as linhas correspondentes.
ou use awk:
$ awk '/class="col-6"/{getline; print $0}' test.html
<p>One of three columns</p>
Nota: Isso funciona apenas se a estrutura permanecer exatamente como sua entrada de teste. Em geral, eu sempre preferiria um analisador xml / html adequado.
por exemplo 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>
Ou usando xmlstarletassim:
$ xmlstarlet sel -t -m '//div[@class="col-6"]' -c './p' -n test.html
<p>One of three columns</p>
O que significa um erro “Não é possível encontrar o símbolo” ou “Não é possível resolver o símbolo”?