Bash并在变量中替换整个字符串?

时间:2014-11-04 14:59:56

标签: regex bash variables replace

我正在尝试使用Bash替换来替换变量中的整个字符串(如果它与模式匹配)。例如:

pattern="ABCD"

${var/pattern/}

删除(替换为空)$pattern

$var的第一次出现
${var#pattern}

$pattern

的开头删除$var

但是如何从"^ABCD$"中删除正则表达式模式$var?我可以:

if [ $var == "ABCD" ] ; then 
  echo "This is a match." # or whatever replacement
fi

但这正是我正在寻找的。

1 个答案:

答案 0 :(得分:5)

您可以进行正则表达式检查:

pattern="^ABCD$"
[[ "$var" =~ $pattern ]] && var=""

它使用$var中定义的正则表达式检查$pattern。如果匹配,则执行命令var=""

测试

$ pattern="^ABCD$"
$ var="ABCD"
$ [[ "$var" =~ $pattern ]] && echo "yes"
yes
$ var="1ABCD"
$ [[ "$var" =~ $pattern ]] && echo "yes"
$ 

有关详细信息,请参阅check if string match a regex in BASH Shell script