Como usar sed, awk ou grep para deletar um determinado padrão, mas manter todo o resto

0

Eu quero excluir tudo, menos uma mensagem. Por exemplo, se tivermos o seguinte:

<p class="TweetTextSize  js-tweet-text tweet-text" lang="en" data-aria-label-part="0">.<a href="/TuckerCarlson" class="twitter-atreply pretty-link js-nav" dir="ltr" data-mentioned-user-id="22703645" ><s>@</s><b>TuckerCarlson</b></a>: &quot;Massive demographic change has political consequences.&quot; <a href="/hashtag/Tucker?src=hash" data-query-source="hashtag_click" class="twitter-hashtag pretty-link js-nav" dir="ltr" ><s>#</s><b>Tucker</b></a><a href="https://t.co/PKqNgaihMQ" class="twitter-timeline-link u-hidden" data-pre-embedded="true" dir="ltr" >pic.twitter.com/PKqNgaihMQ</a></p>

O resultado depois de usar o comando deve ficar assim:

Massive demographic change has political consequences.

Minha tentativa até agora

sed -n "/<p class="TweetTextSize  js-tweet-text tweet-text" lang="en" data-aria-label-part="0">/,/<\/p>/p">>

O que estou tentando fazer é excluir o que está dentro de todo o <> </> padrão entre <p> </p> e manter o restante. Eu sei que não parece fácil, mas eu ainda apreciaria qualquer ajuda.

    
por Abdullah Alhag 18.04.2017 / 04:24

1 resposta

4

A solução usa xmstarlet ferramenta:

xmlstarlet sel -t -v "/p/text()[2]" -n file | sed 's/.*"\(.*\)"//'

A saída:

Massive demographic change has political consequences.

sel option

sel (or select) - Select data or query XML document(s) (XPATH, etc)

-t --template opções

-v option

-v or --value-of - print value of XPATH expression

/p/text()[2] - Expressão XPath, seleciona o segundo nó de texto do parágrafo (o primeiro nó de texto é . )

sed 's/.*"\(.*\)"//' - para extrair a mensagem entre aspas duplas

    
por 18.04.2017 / 10:24

Tags