环境变量替代sed?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (32)

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

#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”引用该$varname部分,以便它不会被直接替换,这是我所做的,只有在前面定义变量时才起作用。

我如何让sed将它识别$var为shell中定义的环境变量?

提问于
用户回答回答于

你的两个示例看起来完全相同,这使得难以诊断问题。潜在问题:

  1. 您可能需要双引号,如英寸 sed 's/xxx/'"$PWD"'/'
  2. $PWD可能包含一个斜杠,在这种情况下,您需要找到一个包含的字符$PWD作为分隔符。

或许,一次性处理这两个问题

sed 's@xxx@'"$PWD"'@'
用户回答回答于

你想搜索'foo'并将其替换为$ BAR的内容,则可以将sed命令放在双引号中。

sed 's/foo/$BAR/g'
sed "s/foo/$BAR/g"

首先,$ BAR不会正确扩展,而第二个$ BAR会正确扩展。

扫码关注云+社区