我有这样的文字:
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
唯一的解决方案吗?
答案1
更好地使用 sed:
$ sed -E 's/.*(<foo:.+>).+time=([0-9.]+).*/\1=\2/' logfile.txt
<foo:ImportantText>=1.234
<foo:AlsoImportant>=9.9
<foo:ImportantText>=0.987