Regex 仅解析具有多个匹配项的行中的第一个正则表达式匹配项

Regex 仅解析具有多个匹配项的行中的第一个正则表达式匹配项,regex,grep,Regex,Grep,是否可以有一个只解析此行a1bcdea1中的a1bcdea1的正则表达式 此grep命令不起作用: $ cat txtfile a1bcdea1ABCa1DEFa1 $ grep -oE "[A-Z,a-z]1.*?[A-Z,a-z]1" txtfile a1bcdea1ABCa1DEFa1 我希望grep的输出仅为a1bcdea1 编辑: 很明显,我可以使用GRIP-O“A1BCDEA1”作为上述行,但如果有几千行,目标是匹配第一个代码> [AZ,AZ] 1 [*[AZ,AZ] 1 < /代

是否可以有一个只解析此行
a1bcdea1
中的
a1bcdea1
的正则表达式

此grep命令不起作用:

$ cat txtfile
a1bcdea1ABCa1DEFa1
$ grep -oE "[A-Z,a-z]1.*?[A-Z,a-z]1" txtfile
a1bcdea1ABCa1DEFa1
我希望grep的输出仅为
a1bcdea1

编辑:


很明显,我可以使用GRIP-O“A1BCDEA1”作为上述行,但如果有几千行,目标是匹配第一个代码> [AZ,AZ] 1 [*[AZ,AZ] 1 < /代码>每一行。

< P>这里是<代码> GNUAWK < /C>解决方案,使用<代码>分裂< /代码>函数:

awk '(n = split($0, a, /[a-zA-Z]1/, b)) > 1 {print b[1] a[2] b[2]}' file

awk
命令分割regex
/[a-zA-Z]1/
上的每一行,并将分割的标记存储在数组
a
中,将分隔符存储在数组
b

如何使用和限制使用的字符集:

grep -o '^[A-Za-z]1[A-Za-z]*1'

如果您希望中间有更多的数字或其他字符,请转到

匹配需要模式。因为不是在生产线开始,去吧


报告匹配的开始,也是PCRE功能。

能否说明您对要匹配的字符串的要求?否则,为什么不干脆
head-c8 txtfile
grep-oE”([a-z]*1){2}”
甚至
grep-oE“a1bcdea1”
?字符串应该以大写或小写字母开头,后跟数字1,后跟任意次数的字符,以大写或小写字母结尾,后跟数字1。基本上,
[A-Z,A-Z]1.*?[A-Z,A-Z]1
正在做什么。整行
a1bcdea1ABCa1DEFa1
将匹配我的正则表达式,但其第一部分也将匹配:
a1bcdea1
,我只需要第一个匹配项。
a1bcdea1
部分是否始终位于行的开头?否,它可以是任何大写或小写字符多次:像这样的代码> A1DCFA1或<代码> C1ABDRFRESARR1或<代码> R1UaySDHAZZ1等。您会考虑<代码> AWK < /代码>还是<代码> GNU AWK < /代码>解决方案?AWK命令仅在我预期的ReEX处于行的开始时才正常工作,例如,它不适用于这一行
aa(l)e1a[ab](O)a[b]1a(r)eqqqqqqq2-q(n3)[nb]q(q34)qqqqq4
,其中我希望输出为
e1a[ab](O)a[b]1a(r)eq1
啊我在
awk
中有额外的
a[1]/code>导致错误结果。它是固定的。这只在希望的匹配在一行中开始工作时,如果匹配在中间行,它将不起作用,请参阅注释Bel..A.Rasavi。在这种情况下,您可能可以使用<代码> GRP-OP '*.*[K-[AZ-Z] 1。* [AZ-Z] 1’< /COD>。
grep -o '^[A-Za-z]1[A-Za-z]*1'
grep -oP '^[A-Za-z]1.*?[A-Za-z]1'
grep -oP '^.*?\K[A-Za-z]1.*?[A-Za-z]1'