如何将grep命令匹配到的所有Windows字符串批量替换为Linux?
解决方案
你需要同时用到 xargs 和 sed,二者不是二选一的关系:grep 负责筛选出匹配内容的文件路径,xargs 负责把路径批量传递给 sed 执行替换操作。
正确命令组合
1. 预测试(仅输出替换效果,不修改文件)
先运行这个命令确认替换结果符合预期,避免改错内容:
grep -rlw . -e "Windows" | xargs sed 's/Windows/Linux/g'
2. 正式执行替换(直接修改文件内容)
确认替换规则无误后,给 sed 增加 -i 参数写入修改:
- Linux 系统(GNU sed 环境):
grep -rlw . -e "Windows" | xargs sed -i 's/Windows/Linux/g'
- macOS 系统(BSD sed 环境):
需要给-i加空后缀参数,否则会报错:
grep -rlw . -e "Windows" | xargs sed -i '' 's/Windows/Linux/g'
常见运行失败原因排查
- 没有给
grep加-l参数:-l的作用是仅输出匹配的文件名,如果你用原来的-n参数会输出匹配的行内容,传给sed自然无法识别文件路径 - 忘记给
sed加-i参数:不加-i的话替换结果只会输出到终端,不会写入原文件 - 有二进制文件需要跳过:可以给
grep加-I参数忽略二进制文件,避免乱码报错:
grep -rlwI . -e "Windows" | xargs sed -i 's/Windows/Linux/g'
内容的提问来源于stack exchange,提问作者Rav
相关产品推荐
相关产品推荐

