14. 改变分隔符


在上述所有 sed 示例中,我们使用默认的 sed 分隔符/。 即s/original-string/replacement-string/,当original-stringreplacement-string中存在斜杠/时,我们需要使用\对其进行转义。

对于本示例,创建如下文件,其中包含目录路径。

$ vi path.txt
reading /usr/local/bin directory

现在,让我们使用 sed 替换命令将/usr/local/bin更改为/usr/bin

在此 sed 替换示例中,在original-stringreplacement-string中使用反斜杠\对分隔符路径分隔符/进行转义。

$ sed 's/\/usr\/local\/bin/\/usr\/bin/' path.txt
reading /usr/bin directory

有点丑陋不是吗?当您尝试替换长路径名时,使用所有这些转义字符\可能会非常混乱。 幸运的是,您可以使用任何字符作为替换分隔符。 例如,|^@!

以下所有内容均有效且易于阅读。我没有显示命令的输出,因为它们都产生完全相同的结果。 我更喜欢在替换目录路径时使用@(或!)符号,但这是您个人的选择。

sed 's|/usr/local/bin|/usr/bin|' path.txt
sed 's^/usr/local/bin^/usr/bin^' path.txt
sed 's@/usr/local/bin@/usr/bin@' path.txt
sed 's!/usr/local/bin!/usr/bin!' path.txt