首页 > 解决方案 > 使用 grep 将正则表达式匹配组重新组合成新字符串

问题描述

假设我有一个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”

标签: regexlinuxbashgrep

解决方案


您不能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

推荐阅读