首页 > 解决方案 > 仅解析具有多个匹配项的行中的第一个正则表达式匹配项

问题描述

是否有可能有一个只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。

标签: regexgrep

解决方案


这是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


推荐阅读