regex - 仅解析具有多个匹配项的行中的第一个正则表达式匹配项
问题描述
是否有可能有一个只a1bcdea1
从这一行解析的正则表达式a1bcdea1ABCa1DEFa1
?
此 grep 命令不起作用:
$ cat txtfile
a1bcdea1ABCa1DEFa1
$ grep -oE "[A-Z,a-z]1.*?[A-Z,a-z]1" txtfile
a1bcdea1ABCa1DEFa1
我希望 grep 的输出为 only a1bcdea1
。
编辑:
很明显,我可以只对上面的行使用 grep -o "a1bcdea1" ,但考虑是否有几千行,目标是[A-Z,a-z]1.*?[A-Z,a-z]1
为每一行匹配 FIRST。
解决方案
这是gnu awk
使用split
函数的解决方案:
awk '(n = split($0, a, /[a-zA-Z]1/, b)) > 1 {print b[1] a[2] b[2]}' file
a1bcdea1
此awk
命令拆分正则表达式中的每一行,/[a-zA-Z]1/
并将拆分标记存储在数组中a
,并将分隔符存储在数组中b
。
推荐阅读
- c - 计算和打印矩阵的对角线之和
- javascript - 如何在 Angular 中使用 addEventListener 和 postMessage?
- php - 如何将日期、时间和值从单选按钮放入数据库
- c# - 逐个像素地动态绘制和显示,有一些延迟
- npm - 如何从 Nexus oss 代理获取依赖于 github 项目的 npm 包
- django - Django 测试 - 发送包含整数的数组数组
- android - 在 android 中使用改造登录
- json - 我如何在 nunjuncks 中乘以数据?
- swift - 为什么不能在swift中将可变参数标记为inout?
- vue.js - Vue Js 2 / Vue-CLI 3 / 托管时显示空白页