我在配置中有一个变量,我想用一个值替换它。
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
答案 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
ROOT=rROOT
的命令。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' " '
sed
在sed
尝试理解命令之前替换根变量
您可以在#
命令中使用其他字符,例如sed
:
sed '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'