如何在SED中转义文件路径?


39

我想替换$fileWithPath$file,但是这行不通,因为(我认为)路径未转义。如何逃脱呢?

sed -i 's/${fileWithPath}/HAHA/g' $file

Answers:


71
sed -i 's|'$fileWithPath'|HAHA|g' file

单引号定义字符串文字。将变量放在文字之外可以使外壳扩展该部分。

另外:如果要解析路径,请在sed命令中使用不与目录定界符“ /”混淆的定界符。


1
请注意,如果$fileWithPath包含空格,则会插入错误的模式。
Lekensteyn 2011年

关于更改文件路径分隔符的小贴士可以节省生命!
Shadoninja '16

我认为您的命令中引号过多。我的例子sed -i 's|auth-user-pass nordvpn.txt|auth-user-pass /etc/openvpn/nordvpn.txt|g' *.ovpn似乎有效。
莱奥波德·赫兹(LéoLéopoldHertz),2017年

14

带正斜杠的文字字符串的一种更好方法:

sed -i "s|my/path|my/other/path|g" myFileOfPaths.txt

这个当之无愧的奥斯卡!简单而优雅
Toan Nguyen

14

在替换字符串或模式字符串包含斜杠的情况下,可以利用以下事实:GNU sed允许替代命令使用替代定界符。分隔符的常见选择是竖线字符|。#号 -分隔字符的最佳选择通常取决于所处理文件的类型。您可以尝试

sed -i 's#'$fileWithPath'#HAHA#g' $file

如果只需要更改第一个出现的字符然后删除“ g”,则在最后一个之后的字符“ g” 用于更改文件中的所有出现的字符。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.