![无法使用 sed 替换路径](https://linux22.com/image/699286/%E6%97%A0%E6%B3%95%E4%BD%BF%E7%94%A8%20sed%20%E6%9B%BF%E6%8D%A2%E8%B7%AF%E5%BE%84.png)
如何使用 sed 命令将文件中的一条路径替换为另一条路径,并且当它在脚本中用作变量时它可以起作用。
sed -i "s/"system_filter = /etc/define_filter_file"/"system_filter = /usr/local/etc/file_regex"/g" /etc/exi.conf.bak
答案1
您需要转义所提供路径中的所有斜杠,并将开始和结束引号更改为单引号。
sed -i 's/"system_filter = \/etc\/define_filter_file"/"system_filter = \/usr\/local\/etc\/file_regex"/g' /etc/exi.conf.bak
该命令表达为:
sed -i 's/path1/path2/g'
Path1 和 path2 不能明确包含,/
因为这会与整个表达式混淆。
答案2
来自 GNU sed 的 infotex 手册(参见info sed
):
s
(替代)命令 的语法是s/REGEXP/REPLACEMENT/FLAGS
。/
字符可以统一 被任何其他单个字符替换1在任何给定s
命令中。该/
字符(或代替该字符的任何其他字符)只有在其前面有一个\
字符时才能出现在 REGEXP 或 REPLACEMENT 中。
即用作|REGEXP 和替换之间的分隔符,sed 命令变为:
sed -i 's|"system_filter = /etc/define_filter_file"|"system_filter = /usr/local/etc/file_regex"|g' /etc/exi.conf.bak
或者简而言之:
sed s|/some/path|/alternate/path/|
这比其他方法容易得多,可以避免大量的正斜杠:
sed s/\/some\/path/\/alternate\/path\//
1. (sed
OSX 的手册页明确排除了反斜杠\和换行符,不再符合上述条件)“任何其他单个字符”)