shell——正则匹配
在看一个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。