环境变量替代sed
如果我从脚本运行这些命令:
#my.sh
PWD=bla
sed 's/xxx/'$PWD'/'
...
$ ./my.sh
xxx
bla
没事。
但是,如果我运行:
#my.sh
sed 's/xxx/'$PWD'/'
...
$ ./my.sh
$ sed: -e expression #1, char 8: Unknown option to `s'
我在教程中看到,要从shell中替换环境变量,您需要停止,并且'out quote' $varname
部分,以便它不被直接替换,这就是我所做的,并且只有在变量被定义之前。
我如何让sed将$var
识别为一个环境变量,就像在shell中定义的一样?
您的两个示例看起来完全相同,这使得难以诊断问题。 潜在问题:
您可能需要双引号,如在sed 's/xxx/'"$PWD"'/'
$PWD
可能包含斜线,在这种情况下,您需要查找$PWD
未包含的字符作为分隔符。
或许,一次性处理这两个问题
sed 's@xxx@'"$PWD"'@'
除了Norman Ramsey的回答之外,我想补充一点,你可以对整个字符串进行双引号(这可能会使语句更具可读性并且不易出错)。
因此,如果您想搜索'foo'并将其替换为$ BAR的内容,则可以将sed命令放在双引号中。
sed 's/foo/$BAR/g'
sed "s/foo/$BAR/g"
首先,$ BAR不会正确扩展,而第二个$ BAR会正确扩展。
您可以在替换中使用除“/”之外的其他字符:
sed "s#$1#$2#g" -i FILE
链接地址: http://www.djcxy.com/p/47121.html
上一篇: Environment variable substitution in sed
下一篇: TFS and VS2015: how to diff large amount of changed files?