问题

sed 替换语法 s/abc/xyz/g 能用其他字符代替 / 吗?

答案

可以!sed 可以使用几乎任何字符作为分隔符,在处理包含斜杠的路径时特别有用。

示例

常规替换

1
sed 's/abc/xyz/g'

使用 # 作为分隔符

处理路径时更清晰:

1
sed 's#/path/to/abc#/path/to/xyz#g'

使用 _ 作为分隔符

1
sed 's_/path/to/abc_/path/to/xyz_g'

使用 | 作为分隔符

1
sed 's|/path/to/abc|/path/to/xyz|g'

常用分隔符对比

分隔符 使用场景 示例
/ 默认,不包含路径 s/abc/xyz/g
# 处理路径(推荐) s#/path/abc#/path/xyz#g
_ 可读性好 s_old_new_g
| 避免管道冲突 s|old|new|g
, 简洁 s,old,new,g

注意事项

  • 选择的分隔符不能在模式或替换文本中出现
  • 如果出现需要转义:s/a\/b/c\/d/g 或改用其他分隔符 s#a/b#c/d#g
  • 使用合适的分隔符可以提高命令可读性