Grep
在 perl 模式下使用 grep 跳過輸出中的文本
我有這樣的文字:
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
我想得到:
<foo:ImportantText>=1.234 <foo:AlsoImportant>=9.9 <foo:ImportantText>=0.987
我使用這條線:
grep -Po '(<foo:.+>).+time=(\d+.\d+)' logfile.txt
- 注意我不需要擔心誤報,因為
<foo:
並且time=
不會出現在文本的其他地方。也是blah blah
隨機文本,而不是文字。這給了我:
<foo:ImportantText> blah blah time=1.234 <foo:AlsoImportant> blah blah blah time=9.9 <foo:ImportantText> blah blah time=0.987
如何刪除中間文本?我認為
'(<foo:.+>)(?=.+time)=(\d+.\d+)'
可能有效,但它沒有。更新:
grep -Po '(<foo:.+>).+time=(\d+.\d+)' logfile.txt | awk -F ' ' '{print $1substr($NF,4)}'
這行得通,但是否有
grep
-only 解決方案?
更好地使用 sed:
$ sed -E 's/.*(<foo:.+>).+time=([0-9.]+).*/\1=\2/' logfile.txt <foo:ImportantText>=1.234 <foo:AlsoImportant>=9.9 <foo:ImportantText>=0.987