mac@sed替换文本内容
在 macOS 上使用 sed
命令替换文本时,需要注意 macOS 自带的 sed
(基于 BSD)与 Linux 上常见的 GNU sed
有一些差异,尤其是在 -i
参数的用法上。
基本语法(macOS BSD sed)
1 | sed -i '' 's/原字符串/新字符串/g' 文件名 |
-i ''
表示就地替换(in-place),并且不创建备份。如果想创建备份,比如.bak
,可以写-i '.bak'
。's/原/新/g'
是 sed 的替换命令:s
表示 substitute(替换);/g
表示全局替换(每行匹配多次的会全部替换)。
mac sed示例
1. 替换文件中所有的 foo 为 bar:
1 | sed -i '' 's/foo/bar/g' example.txt |
2. 替换并创建备份文件 example.txt.bak:
1 | sed -i '.bak' 's/foo/bar/g' example.txt |
3.多个文件批量替换
可以配合 find
或 grep
使用。例如:
1 | find . -name "*.txt" -exec sed -i '' 's/foo/bar/g' {} + |
或者使用 xargs
:
1 | grep -rl 'foo' . | xargs sed -i '' 's/foo/bar/g' |