我想替换$fileWithPathin $file,但是这不起作用,因为(我认为)路径没有被转义。怎么逃避呢?
sed -i 's/${fileWithPath}/HAHA/g' $file
Run Code Online (Sandbox Code Playgroud)
ata*_*ata 80
sed -i 's|'$fileWithPath'|HAHA|g' file
Run Code Online (Sandbox Code Playgroud)
单引号定义字符串文字。将变量放在文字之外允许 shell 扩展该部分。
另外:如果您要解析路径,请在 sed 命令中使用一个不会与目录分隔符“/”混淆的分隔符。
小智 21
带有正斜杠的文字字符串的更好方法:
sed -i "s|my/path|my/other/path|g" myFileOfPaths.txt
Run Code Online (Sandbox Code Playgroud)
c0m*_*m3t 15
在替换字符串或模式字符串包含斜杠的情况下,您可以利用 GNU sed 允许替代命令的替代分隔符这一事实。分隔符的常见选择是管道字符| 或哈希# - 分隔字符的最佳选择通常取决于正在处理的文件类型。在你的情况下,你可以尝试
sed -i 's#'$fileWithPath'#HAHA#g' $file
Run Code Online (Sandbox Code Playgroud)
如果您只需要更改第一个出现然后删除'g',则最后一个#之后的字符 'g'用于更改文件中的所有出现。