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
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
<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?
Tags grep perl regular-expression