Regex awk正则表达式字符/模式的最后一次出现
我需要得到模式最后一次出现的索引。尝试了来自和的想法。如果我想要最后一个Regex awk正则表达式字符/模式的最后一次出现,regex,awk,Regex,Awk,我需要得到模式最后一次出现的索引。尝试了来自和的想法。如果我想要最后一个:(索引为6)的索引,则以下内容不起作用。试图使用锚点$,但显然没有抓住它(因为它第一次出现,即3)。非常感谢你的解释 echo 12:45:78 | awk ' { print match($1, /:.+$/) }' 你需要使用 /:[^:]*$/ 这里,[^::]*(一个[^…]是一个反括号表达式)将匹配0+个字符,而不是:,因此,只有最后一个:与第一个:匹配 注意:对您来说几乎是正确的,唯一的区别是量词:如果您
:
(索引为6)的索引,则以下内容不起作用。试图使用锚点$
,但显然没有抓住它(因为它第一次出现,即3)。非常感谢你的解释
echo 12:45:78 |
awk '
{
print match($1, /:.+$/)
}'
你需要使用
/:[^:]*$/
这里,[^::]*
(一个[^…]
是一个反括号表达式)将匹配0+个字符,而不是:
,因此,只有最后一个:
与第一个:
匹配
注意:对您来说几乎是正确的,唯一的区别是量词:如果您将+
与[^::]
一起使用,您将无法匹配输入字符串末尾的:
。因此,*
是您想要的量词
图案细节:
-一个:
后跟:
-除[^:::*
以外的任何0+字符:
-字符串结束$
/:[^:]*$/
这里,[^::]*
(一个[^…]
是一个反括号表达式)将匹配0+个字符,而不是:
,因此,只有最后一个:
与第一个:
匹配
注意:对您来说几乎是正确的,唯一的区别是量词:如果您将+
与[^::]
一起使用,您将无法匹配输入字符串末尾的:
。因此,*
是您想要的量词
图案细节:
-一个:
后跟:
-除[^:::*
以外的任何0+字符:
-字符串结束$
- 这里不需要使用任何正则表达式,因为awk允许您使用分隔符分割文件
使用
:
作为输入字段分隔符后,从总行长中减去最后一个字段的长度,得到如下正确索引:
awk -F: '{print length($0) - length($NF)}' <<< '12:45:78'
6
awk-F:'{print length($0)-length($NF)}'这里不需要使用任何正则表达式,因为awk允许使用分隔符分割文件
使用:
作为输入字段分隔符后,从总行长中减去最后一个字段的长度,得到如下正确索引:
awk -F: '{print length($0) - length($NF)}' <<< '12:45:78'
6
awk-F:'{print length($0)-length($NF)}使用/:[^:]*$/
([^:]*
将匹配0+字符,而不是:
)实际上,符合您的场景。你是怎么尝试的?是的,我现在明白了——已经注意到了。变得更聪明…所以:[^:::
说一个:
,然后说除了:
以外的任何字符多次?是的。不要忘记$anchor。另外,请检查anubhava的答案,这可能对您更合适(除非您需要更多的东西来检查您的输入,而这些东西确实需要正则表达式)。使用/:[^:]*$/
([^::]*
将匹配0+个字符,而不是:
)实际上,符合您的场景。你是怎么尝试的?是的,我现在明白了——已经注意到了。变得更聪明…所以:[^:::
说一个:
,然后说除了:
以外的任何字符多次?是的。不要忘记$anchor。此外,请检查anubhava的答案,该答案可能对您更为合适(除非您需要更多的东西来检查输入,这确实需要正则表达式)。当您使用awk时,最好利用所有的awk优点:)当您使用awk时,最好利用所有的awk优点:)