如果我从脚本运行这些命令:
#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'
我在教程中读到,要从外壳程序中替换环境变量,您需要停下来,并引用$varname
部分,这样它就不会被直接替换,这就是我所做的,并且只有在之前定义了变量时才能起作用。
如何才能让sed将$var
识别为在shell中定义的环境变量?
发布于 2009-04-14 17:24:39
除了Norman Ramsey的回答之外,我还想补充说,您可以用双引号将整个字符串引起来(这可能会使语句更具可读性,也不容易出错)。
因此,如果要搜索'foo‘并将其替换为$BAR的内容,可以将sed命令用双引号括起来。
sed 's/foo/$BAR/g'
sed "s/foo/$BAR/g"
在第一种情况下,$BAR不会正确扩展,而在第二种情况下,$BAR会正确扩展。
发布于 2014-04-17 21:20:37
另一个简单的选择:
因为$PWD
通常包含一个斜杠/
,所以对于sed语句使用|
而不是/
:
sed -e "s|xxx|$PWD|"
发布于 2012-03-08 18:37:13
除了"/“之外,您还可以使用其他字符进行替换:
sed "s#$1#$2#g" -i FILE
https://stackoverflow.com/questions/584894
复制相似问题