变量

时间:2018-04-03 19:42:13

标签: bash shell unix

bash是否支持一次对变量进行多个字符串替换?

变量上的

(示例V变量)我想用string1替换XXXXXXX,用string2替换YYYYY,用string3替换ZZZZZZZ

是否可以运行1个这样的重新间隔命令而不是下面的3次运行?

$ V="AAAAAAA/XXXXXXX/BBBBBB/YYYYY/CCCCCC/ZZZZZZZ"
$ V=${V//XXXXXXX/string1}
$ V=${V//YYYYY/string2}
$ V=${V//ZZZZZZZ/string3}
$ echo $V
AAAAAAA/string1/BBBBBB/string2/CCCCCC/string3
$

更新:有人将我的问题标记为另一个问题的副本,遗憾的是我在页面上找不到任何直接相似性或回答我的问题。

3 个答案:

答案 0 :(得分:1)

如果您使用sed,则会更容易。

V=$(echo $V | sed -e 's/XXXXXXX/string1/' -e 's/YYYYY/string2/' -e 's/ZZZZZZZ/string3/')

答案 1 :(得分:1)

是的,你可以这样做: -

V=$(echo "$V" | sed 's/XXXXXXX/string1/g;s/YYYYY/string2/g;s/ZZZZZZZ/string3/g')

它将如何运作? sed命令将搜索sting XXXXXX并将其替换为string2,将字符串YYYYYY替换为string2,最后将zZZZZZZ替换为string3并将新字符串存储到变量V中。

现在检查结果如下: -

echo $V

答案 2 :(得分:0)

@ Abhijit的答案非常好(sed选项/g对应于Bash //替换所有出现的事件)但请注意,在Bash中你可以避免回声和管道通过做:

V=$(sed -e 's/XXXXXXX/string1/g;s/YYYYY/string2/g;s/ZZZZZZZ/string3/g' <<< $V)

此功能实际上称为here string