regex - 使用 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
推荐阅读
- python - 如何在 matplotlib.pyplot 中更改图形颜色而不是背景颜色
- node.js - Firebase 多路径更新将父节点设置为 null
- ios - 如何在 iOS 应用中获取设备充电类型?
- javascript - 测试 Es6 AngularJS 组件
- firebase - Firebase 托管重写为无法按预期工作的功能
- java - 无法解析符号“widget”和“v7”。我该如何解决?
- php - 如何使用 Slim 框架从 POST 请求中访问 JSON 元素的值?
- php - 复选框不针对每一行
- java - NatTable 单元格编辑应在键入任何“常规”字符(如字母或数字)时禁用
- javascript - 根据 React 中的多个下拉选择过滤数据