Regular-Expression

不理解匹配整數的正則表達式模式

  • January 9, 2022

https://www.gnu.org/software/sed/manual/sed.html#Command_002dLine-Options

-n

–quiet

–silent

-e script

–expression=script 將腳本中的命令添加到要在處理輸入時執行的命令集中。

https://stackoverflow.com/questions/14593320/insert-field-separator-to-arrange-and-capture-value-in-variable-in-shell-script/14593411#14593411

像這個答案:

echo $'For example:\nThis is counter1 1000\nthis counter2 2000\n
    this counter3 is higher value 3000\ndone.\n' |
 sed -ne 's/^.* \([0-9]\{1,99\}\)/\1/p'

我理解([0-9]\{1,99\}\)指的是模式整數。

^引用字元串的開頭。

.* 指 1 個或多個字元。

但總的來說,我仍然對 sed -ne 's/^.* \([0-9]\{1,99\}\)/\1/p'

(首先,這不是 bash 整數正則表達式模式。sed正在處理正則表達式,與 bash 無關)

所以我知道你無法找出正則表達式sed -ne 's/^.* \([0-9]\{1,99\}\)/\1/p'

讓我們讓它更簡單。等效的程式碼是sed -E -ne 's/^.* ([0-9]{1,99})/\1/p'

啟用擴展(現代-E)正則表達式,您不必使用\

s/pattern/replacement/運算符在左側查找與正則表達式模式匹配的字元串,並將其替換為右側的字元串。

現在,讓我們專注於/^.* ([0-9]{1,99})/

  • ^在行首匹配
  • .*匹配任何字元 0 次或更多次
  • (space) 匹配單個空格字元
  • [0-9]{1,99}匹配任何出現最少 1 次到最多 99 次的數字;所以任何長度為 1 到 99 的數

([0-9]{1,99})在括號中,這意味著 sed 將“擷取”此子字元串並將其\1用於使用的替換部分。

引用自:https://unix.stackexchange.com/questions/685618