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个赞
您的两个示例看起来完全相同,这使问题难以诊断。潜在问题:
您可能需要双引号,如
sed 's/xxx/'"$PWD"'/'
$PWD
可能包含斜杠,在这种情况下,您需要找到一个未包含的字符$PWD
用作分隔符。
或许可以立刻解决这两个问题
sed 's@xxx@'"$PWD"'@'
慕慕森
TA贡献1856条经验 获得超17个赞
除了Norman Ramsey的回答之外,我还想补充一点,你可以对整个字符串进行双引号(这可能使语句更具可读性,更不容易出错)。
因此,如果您要搜索“foo”并将其替换为$ BAR的内容,则可以将sed命令括在双引号中。
sed 's/foo/$BAR/g' sed "s/foo/$BAR/g"
在第一个,$ BAR将无法正确扩展,而在第二个$ BAR将正确扩展。
- 3 回答
- 0 关注
- 2928 浏览
添加回答
举报
0/150
提交
取消