簡體   English   中英

awk正則表達式最后出現的字符/模式

[英]awk regex last occurence of character/pattern

我需要獲取模式最后一次出現的索引。 這里這里嘗試了一些想法。 如果我想要最后一個的索引,則以下內容不起作用:索引為6)。 試圖使用錨$但顯然沒有抓住它(因為它給了我第一次出現,即3)。 解釋真的很感激。

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

這里不需要使用任何正則表達式,因為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

你需要使用

/:[^:]*$/

在此, [^:]* (一個[^...]是一個否定的括號表達式 )將匹配比其他 0+字符: ,所以,只有最后:與所述第一匹配:

注意這個想法幾乎適合你,唯一的區別是量詞:如果你使用+[^:] ,你將不匹配:在輸入字符串的最后。 因此, *是您想要的量詞。

圖案細節

  • : - a :緊隨其后......
  • [^:]* - 除以下之外的任何0+字符:
  • $ - 結束字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM