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。

 

参考文档:bash的BASH_REMATCH变量 – SRE笔记

posted @ 2022-04-17 14:00  沄持的学习记录  阅读(2458)  评论(0编辑  收藏  举报