torr / awk - remove todas as tags, exceto apenas duas tags e textos simples

1

aqui está um exemplo para o meu arquivo de texto:

<w:r><w:t>
<w:r w:rsidR="00D171FD">
<w:t></w:t>
</w:r><w:r>
<w:t xml:space="preserve">
This is a sample text </w:t>
</w:r>
<w:highlight w:val="green"/>
<w:r w:rsidR="00D171FD">
<w:color w:val="FF0000"/>
<w:t>
Sample text</w:t>
</w:r>

O problema é que preciso do texto puro e das seguintes tags apenas:
color w:val="FF0000"
highlight w:val="green"

Como isso pode ser feito?

    
por Mina Mohsen 07.03.2013 / 19:50

1 resposta

0

Com a linha de comando acima, ela funcionará se você nunca tiver essa expressão como texto:

  1. <w:
  2. \>

A linha de comando é:

cat Myfile.txt  | grep -E "color w:val=|highlight w:val=" | sed s/"<w:"/""/g | sed s/"\/>"/""/g

Explicação:

  • grep -E, --extended-regexp PATTERN
    Interpretar PATTERN como uma expressão regular estendida
  • | lógico OU dentro do PADRÃO de grep
  • | símbolo de pipe no ambiente de shell
  • sed s/"<w:"/""/g substitui globalmente (em todos os lugares) "<w:" com string vazia ""

Nota: é possível escrever sed de muitas outras formas e de uma forma mais compacta. Eu acho que isso é didático e pode ser usado em uma gama mais ampla de possibilidades quando é necessário substituir uma expressão por outra.

Esta é a saída:

highlight w:val="green"  
color w:val="FF0000"  
    
por Hastur 08.05.2014 / 22:03