我的目标是通过识别变量名称并使用sed来替换某些变量的值。
但是,我没有得到想要的输出,实际上是在附加值而不是被替换。
输入文件内容:
export TENANT_NAME=xxxx
export WONDER_VALUE=xxx_xxx_xxxx_xxxx
export LOAD_BALANCERS=xxxx_xx
Bash脚本:
#!/bin/bash
sed "s/${1}=*/${1}=${2}/" input.env >> input.env
命令:
./replaceValue.sh WONDER_VALUE BOB_ROB_ALICE
我得到的结果:
export TENANT_NAME=xxxx
export WONDER_VALUE=BOB_ROB_ALICExxx_xxx_xxxx_xxxx
export LOAD_BALANCERS=xxxx_xx
我期望的结果:
export TENANT_NAME=xxxx
export WONDER_VALUE=BOB_ROB_ALICE
export LOAD_BALANCERS=xxxx_xx
错误在于regex:与shell不同,单独的*
不匹配任何内容。您的意思是.*
。在您编写的regex中,=*
仅与=
的多个匹配项之一匹配;这就解释了为什么其余行直到最后都没有匹配。
如果要使用sed修改文件,请使用-i选项。
尝试:
Bash脚本:
#!/bin/bash
sed -i "s/${1}=.*/${1}=${2}/" input.env