【问题标题】:Using sed to replace values in a file [duplicate]使用 sed 替换文件中的值 [重复]
【发布时间】:2025-12-14 09:35:02
【问题描述】:

我的目标是通过识别变量名和使用 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

【问题讨论】:

    标签: bash shell sed


    【解决方案1】:

    错误在于 regex:与 shell 不同,* 单独不匹配任何内容;你的意思是.*。在您编写的 regex 中,=* 仅匹配= 的多个出现之一;这解释了为什么你的行的其余部分没有匹配到最后。

    如果您想使用 sed 修改文件,请使用 -i 选项。

    试试:

    Bash 脚本:

    #!/bin/bash
    
    sed -i "s/${1}=.*/${1}=${2}/" input.env
    

    【讨论】: