【问题标题】:Recombine regex match groups into new string using grep使用 grep 将正则表达式匹配组重新组合成新字符串
【发布时间】:2019-12-09 11:53:03
【问题描述】:
假设我有一个文件file.txt,其内容如下:
somelogoutput
INFO: 1549 ducks: 1544 children playing, 5 something-else.
morelogoutput
以及与上面文件中的中间行匹配的以下正则表达式:
grep -P "(\d*) ducks: (\d*) children playing, (\d*) something-else" file.txt
如何使用匹配组创建格式化字符串?
例如:“(匹配组 2)/(匹配组 1)”
例如:“1544/1549”
【问题讨论】:
标签:
regex
linux
bash
grep
【解决方案1】:
您不能为此使用grep,但可以使用awk:
awk '/^INFO:/{printf "%s/%s\n", $4, $2}' file.txt
虽然我会推荐awk 用于您在问题中描述的任务,但基于正则表达式组重新组合字符串是sed 的任务:
sed -rn 's/INFO: ([[:digit:]]*) ducks: ([[:digit:]]*) children.*/\2\/\1/p' file.txt