regex - 使用 grep 将正则表达式匹配组重新组合成新字符串

标签 regex linux bash 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”

最佳答案

你不能为此使用 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

关于regex - 使用 grep 将正则表达式匹配组重新组合成新字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57299603/

相关文章:

c++ - 从 .txt 文件中提取信息的最佳方式

java - JSch ChannelExec OutputStream 不显示程序输出。但是它适用于 shell 脚本

linux - 打印最后一个斜杠后的文本

linux命令来搜索给定的文件夹

bash - 在本地 bash 函数变量中为脚本设置环境变量

regex - Oracle PL/SQL : remove "space characters" from a string

javascript - 正则表达式 - 拆分数学表达式

regex - [a-z0-9] 是什么意思?

regex - crontab 中的 grep 无法正常工作

linux - 将 shell 变量传递给系统用户