Sed用变量替换值

时间:2018-02-17 09:33:36

标签: bash shell sed

我在配置中有一个变量,我想用一个值替换它。

ROOT="rROOT"

我想用

替换它
ROOT="$root"

因此使用$ root的值(重要的是引号)。

到目前为止,我已经尝试过这种方式了

sed -i s/'ROOT=rROOT'/'ROOT="$root"'/g $directory/settings.conf

结果就是

ROOT="$root"

但是它存储在变量$ root(它始终是路径)

root: /

如何用$ root的值替换rROOT?

Sed版本:(GNU sed)4.2.2

2 个答案:

答案 0 :(得分:2)

好的,不要破坏我的脚本进行测试:

cat tageslog.sh | sed "s/alt=185094/alt=\${root}/g"

使用双引号,但屏蔽美元符号,因此在调用sed时不会丢失和解释root。

使用$ {root}代替" $ root"。

sed "s/ROOT=.rRoot./ROOT=\${root}/g" $directory/settings.conf

如果可行,请使用-i开关:

sed -i "s/ROOT=.rRoot./ROOT=\${root}/g" $directory/settings.conf

答案 1 :(得分:0)

你有不同的问题:

  • 使用echo进行测试 我认为你用
    测试了你的命令 echo ROOT="rROOT" | sed s/'ROOT=rROOT'/'ROOT="$root"'/g
    双引号不会出现在echo的输出中,因此您最终会得到一个适用于ROOT=rROOT的命令。
    当inputfile具有qouble引号时,您不必插入它们 使用双引号进行测试是可能的 echo 'ROOT="rROOT"' | sed s/'ROOT=rROOT'/'ROOT="$root"'/g
  • 将双引号放在单引号之外; 您可以使用echo进行测试:
    echo 'Showing "$PWD" in double quotes is "'$PWD'"'
    echo 'With additional spaces the last part is " '$PWD' " '
  • Root vaiable有斜线会混淆sedsed尝试理解命令之前替换根变量 您可以在#命令中使用其他字符,例如sedsed 's#before#after#'

当您的输入有双引号时:

echo 'ROOT="rROOT"' | sed 's#ROOT="rROOT"#ROOT="'$root'"#g'
# or by remembering strings
echo 'ROOT="rROOT"' | sed -r 's#(ROOT=")rROOT(")#\1'$root'\2#g'

没有双引号的输入

echo 'ROOT=rROOT' | sed 's#ROOT=rROOT#ROOT="'$root'"#g'
# or by remembering strings
echo 'ROOT=rROOT' | sed -r 's#(ROOT=)rROOT#\1"'$root'"#g'