我想在Bash中围绕通配符(或使用通配符的模式)裁剪一个字符串,最好使用参数表达式或grep,如果可能的话,除了sed之外的任何东西。然后在变量中获取该通配符。
字符串示例:
DESERT=pie-cake_berry_cream-sirup
我有一个带通配符的模式:
_ * _
该模式将与我的字符串上的“_berry_”匹配。我想在我的字符串上运行bash命令,如果我使用这种特殊模式,则返回“berry”。
答案 0 :(得分:3)
只需使用BASH_REMATCH
即可访问已捕获的群组:
if [[ $DESERT =~ _(.*)_ ]]; then
echo ${BASH_REMATCH[1]}
fi
这说:嘿,取变量$DESERT
并捕获_
和_
之间的所有内容。如果存在此类匹配,则会在特殊变量$BASH_REMATCH
中捕获结果。
所以在你的例子中:
$ DESERT=pie-cake_berry_cream-sirup
$ if [[ $DESERT =~ _(.*)_ ]]; then echo ${BASH_REMATCH[1]}; fi
返回
berry
<强> BASH_REMATCH 强>
一个数组变量,其成员由'=〜'二进制文件赋值 运算符到[[条件命令(参见条件构造))。 索引为0的元素是匹配的字符串部分 整个正则表达式。索引为n的元素是。的一部分 匹配第n个带括号的子表达式的字符串。这个变量 是只读的。