为了账号安全,请及时绑定邮箱和手机立即绑定

sed中的环境变量替换

sed中的环境变量替换

叮当猫咪 2019-08-27 13:33:08
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中定义的环境变量?
查看完整描述

3 回答

?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

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

  1. 您可能需要双引号,如 sed 's/xxx/'"$PWD"'/'

  2. $PWD可能包含斜杠,在这种情况下,您需要找到一个包含的字符$PWD用作分隔符。

或许可以立刻解决这两个问题

sed 's@xxx@'"$PWD"'@'


查看完整回答
反对 回复 2019-08-27
?
慕慕森

TA贡献1856条经验 获得超17个赞

除了Norman Ramsey的回答之外,我还想补充一点,你可以对整个字符串进行双引号(这可能使语句更具可读性,更不容易出错)。

因此,如果您要搜索“foo”并将其替换为$ BAR的内容,则可以将sed命令括在双引号中。

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

在第一个,$ BAR将无法正确扩展,而在第二个$ BAR将正确扩展。


查看完整回答
反对 回复 2019-08-27
?
森栏

TA贡献1810条经验 获得超5个赞

您可以使用除“/”之外的其他字符替换:

sed "s#$1#$2#g" -i FILE


查看完整回答
反对 回复 2019-08-27
  • 3 回答
  • 0 关注
  • 2928 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信