【问题标题】:Bash and replacing the whole string in variable?Bash并替换变量中的整个字符串?
【发布时间】:2014-12-31 12:44:25
【问题描述】:

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

pattern="ABCD"

${var/pattern/}

删除(替换为空)$pattern$var 中的第一次出现

${var#pattern}

删除$var开头的$pattern

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

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

但这正是我想要的。

【问题讨论】:

  • "${var/$pattern/}" 有什么问题?你能用一些示例输入来澄清一下吗?
  • @anubhava 他正在寻找完全锚定的替代品。在任何地方都能找到匹配项。
  • 我想不出比if 声明更好的东西了。 [ "$var" = ABCD ] && var="" 稍微简洁一些,但想法相同。
  • @etan 和@fedorgui 它对我有用。出于好奇,我将把它打开一段时间,看看是否有其他解决方案。谢谢大家。
  • 请注意,您的前两个示例不会修改 $var - 它们扩展为来自 $var 并具有相应更改的字符串,但 $var 本身保持不变 - 稍后的实例的$var 不会受到影响。

标签: regex bash variables replace


【解决方案1】:

你可以做一个正则表达式检查:

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

它使用$pattern 中定义的正则表达式检查$var。如果匹配,它会执行命令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 了解更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-21
    • 2020-08-14
    • 1970-01-01
    • 2014-01-25
    • 2019-03-28
    • 2014-02-16
    • 1970-01-01
    • 2016-09-13
    相关资源
    最近更新 更多