我需要获取模式最后一次出现的索引。来自here和here的想法。如果我想要最后:
的索引(索引是6),则下面不起作用。试图使用锚$
,但显然没有抓住它(因为它给了我第一次出现,即3)。解释真的很感激。
echo 12:45:78 |
awk '
{
print match($1, /:.+$/)
}'
答案 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几乎适合您,唯一的区别是量词:如果您将+
与[^:]
一起使用,则不会与:
匹配在输入字符串的最后。因此,*
是您想要的量词。
模式详情:
:
- :
后跟...... [^:]*
- 除:
$
- 字符串结束。