猿问

sed中的环境变量替换

sed中的环境变量替换

如果我从脚本运行这些命令:

#my.shPWD=bla
sed 's/xxx/'$PWD'/'...$ ./my.sh
xxx
bla

没事。

但是,如果我跑:

#my.shsed 's/xxx/'$PWD'/'...$ ./my.sh
$ sed: -e expression #1, char 8: Unknown option to `s'

我在教程中读到要替换你需要停止的shell中的环境变量,并且“引用”该$varname部分以便它不直接替换,这就是我所做的,并且只有在之前定义变量时才有效。

我怎样才能将sed识别$var为在shell中定义的环境变量?


叮当猫咪
浏览 2929回答 3
3回答

陪伴而非守候

您的两个示例看起来完全相同,这使问题难以诊断。潜在问题:您可能需要双引号,如 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
随时随地看视频慕课网APP
我要回答