sed 用参数中的值替换

sed 用参数中的值替换

虽然这看起来是一个简单的任务,但 sed 调用并没有替换我发送的 IP 值。相反,它用“${IP}”替换 localhost。

substitute() {
    export IP=$1
    echo $IP
    LC_ALL=C find . -type f -name '*.txt' -exec sed -i.bak 's/localhost/"${IP}"/g' {} \;
}

substitute 10.20.30.40

如何实现用参数发送的值替换的目的?

答案1

您的单引号阻止 ${IP} 被插入到值中。 bash -x 会有所帮助(即将 -x 添加到脚本中的 #!/bin/bash 的 shebang 中)

    + substitute 10.20.30.40
+ export IP=10.20.30.40
+ IP=10.20.30.40
+ echo 10.20.30.40
10.20.30.40
+ LC_ALL=C
+ find /tmp -type f -name '*.txt' -exec sed -i.bak 's/localhost/"${IP}"/g' '{}' ';'

如果你交换它们,

   + substitute 10.20.30.40
+ export IP=10.20.30.40
+ IP=10.20.30.40
+ echo 10.20.30.40
10.20.30.40
+ LC_ALL=C
+ find /tmp -type f -name '*.txt' -exec sed -i.bak 's/localhost/'\''10.20.30.40'\''/g' '{}' ';'

插值有效。不确定最后是否需要引号,但是......

相关内容