awk正则表达式最后出现的字符/模式

时间:2017-03-23 07:49:03

标签: regex awk

我需要获取模式最后一次出现的索引。来自herehere的想法。如果我想要最后:的索引(索引是6),则下面不起作用。试图使用锚$,但显然没有抓住它(因为它给了我第一次出现,即3)。解释真的很感激。

echo 12:45:78 | 
awk '
{
print match($1, /:.+$/)
}'

2 个答案:

答案 0 :(得分:2)

此处无需使用任何正则表达式,因为awk允许您使用分隔符分割文件。

使用:作为输入字段分隔符从总行长度中减去最后一个字段的长度,得到正确的索引,如下所示:

awk -F: '{print length($0) - length($NF)}' <<< '12:45:78'

6

更多例子:

awk -F: '{print length($0) - length($NF)}' <<< '12:45:78111:123'
12

awk -F: '{print length($0) - length($NF)}' <<< '12:45:78:123'
9

awk -F: '{print length($0) - length($NF)}' <<< '12:45'
3

awk -F: '{print length($0) - length($NF)}' <<< '12:'
3

答案 1 :(得分:1)

您需要使用

/:[^:]*$/

此处[^:]*(a [^...]否定括号表达式)将匹配除 :以外的0+字符,因此,只有最后一个:与第一个:匹配。

注意this idea几乎适合您,唯一的区别是量词:如果您将+[^:]一起使用,则不会与:匹配在输入字符串的最后。因此,*是您想要的量词。

模式详情

  • : - :后跟......
  • [^:]* - 除:
  • 以外的任何0 +字符
  • $ - 字符串结束。