环境变量替代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?