mac上sed -i替换字符串异常解决

问题

mvpbang@mvpbang rocky9.5-9x % sed -i 's/91/90/g'  Vagrantfile
sed: 1: "Vagrantfile": invalid command code V

说明你在运行 sed 时错误地把文件名 Vagrantfile 当成了 sed 的“命令表达式”,也就是写法格式不对。

解决

mac sed和 gun sed在替换文本-i语法存在差异

mvpbang@mvpbang rocky9.5-9x % sed --help
sed: illegal option -- -
usage: sed script [-EHalnru] [-i extension] [file ...]
    sed [-EHalnu] [-i extension] [-e script] ... [-f script_file] ... [file ...]

//替换文本语法
sed [-i extension]  xxxx

1. 查看内容(不修改文件):

1
sed 's/foo/bar/' Vagrantfile

2. 原地替换文件内容(macOS 注意 -i '' 语法):

1
2
3
sed -i '' 's/foo/bar/g' Vagrantfile

sed -i '.bak' 's/foo/bar/g' Vagrantfile
  • -i '':表示“就地修改”,macOS 需要这样写,Linux 可以写成 -i-i.bak