Pular texto na saída com grep no modo perl

1

Eu tenho um texto assim:

blah, blah <foo:ImportantText> blah blah time=1.234 blah blah
blah, blah <foo:AlsoImportant> blah blah blah time=9.9 blah blah
blah, blah <foo:ImportantText> blah blah time=0.987 blah blah

Eu quero receber:

<foo:ImportantText>=1.234
<foo:AlsoImportant>=9.9
<foo:ImportantText>=0.987

Eu uso esta linha:

grep -Po '(<foo:.+>).+time=(\d+.\d+)' logfile.txt
  • Observação Não preciso me preocupar com falsos positivos, pois <foo: e time= não aparecem em nenhum outro lugar do texto. Também blah blah é texto aleatório, não literal.

Isso me dá:

<foo:ImportantText> blah blah time=1.234
<foo:AlsoImportant> blah blah blah time=9.9
<foo:ImportantText> blah blah time=0.987

Como faço para descartar o texto intermediário? Eu pensei que '(<foo:.+>)(?=.+time)=(\d+.\d+)' poderia funcionar, mas isso não acontece.

Atualizar :

grep -Po '(<foo:.+>).+time=(\d+.\d+)' logfile.txt
                | awk -F ' ' '{print $1substr($NF,4)}'

Isso funciona, mas existe uma solução grep -apenas?

    
por Ken Y-N 30.08.2018 / 04:12

1 resposta

2

Melhor usar o sed:

$ sed -E 's/.*(<foo:.+>).+time=([0-9.]+).*/=/' logfile.txt 
<foo:ImportantText>=1.234
<foo:AlsoImportant>=9.9
<foo:ImportantText>=0.987
    
por 30.08.2018 / 04:42