在看一個mysql的helm-charts的時候,看到一段shell代碼,才發現原來shell也能支持正則匹配。那很多場景就不需要用awk,grep這些了,會簡潔很多。
demo1
if [[ abcfoobarbletch =~ 'foo(bar)bl(.*)' ]] then echo The regex matches! echo $BASH_REMATCH -- outputs: foobarbletch echo ${BASH_REMATCH[1]} -- outputs: bar echo ${BASH_REMATCH[2]} -- outputs: etch fi
使用內置變量BASH_REMATCH獲取匹配后的值,該變量是只讀數組。
$BASH_REMATCH和${BASH_REMATCH[0]}都是整個匹配結果。
${BASH_REMATCH[1]}是第一個括號內的匹配值。
demo2
[[ 'web-01' =~ -([0-9]+)$ ]] || exit 1 echo ${BASH_REMATCH[0]} -01 echo ${BASH_REMATCH[1]} 01
這段可以用於快速獲取pod的索引,這是同一個應用的pod的不重復標識,可以用於找到特定帶狀態的pod。