在Bash中,如何在通配符模式周围找到并裁剪字符串

时间:2015-12-29 10:50:14

标签: regex bash parsing unix pattern-matching

我想在Bash中围绕通配符(或使用通配符的模式)裁剪一个字符串,最好使用参数表达式或grep,如果可能的话,除了sed之外的任何东西。然后在变量中获取该通配符。

字符串示例:

DESERT=pie-cake_berry_cream-sirup

我有一个带通配符的模式:

  

_ * _

该模式将与我的字符串上的“_berry_”匹配。我想在我的字符串上运行bash命令,如果我使用这种特殊模式,则返回“berry”。

1 个答案:

答案 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

来自man bash - Bash variables

  

<强> BASH_REMATCH

     

一个数组变量,其成员由'=〜'二进制文件赋值   运算符到[[条件命令(参见条件构造))。   索引为0的元素是匹配的字符串部分   整个正则表达式。索引为n的元素是。的一部分   匹配第n个带括号的子表达式的字符串。这个变量   是只读的。