如何通过Bash命令行批量修改多个文件中的字符串?
Bash批量替换多文本文件中的指定字符串
基础批量替换(当前目录)
如果要替换当前目录下所有.txt文件里的old_str为new_str,直接用sed命令:
- Linux(GNU sed):
sed -i 's/old_str/new_str/g' *.txt - macOS(BSD sed),需要指定备份后缀(避免直接覆盖原文件):
替换完成后可以删除备份文件:sed -i.bak 's/old_str/new_str/g' *.txt
说明:rm *.txt.bakg表示全局替换每行中所有匹配的字符串,不加g只会替换每行第一个匹配项。
递归替换子目录中的文件
如果需要处理当前目录及所有子目录里的目标文件,用find配合sed:
- Linux:
find . -type f -name "*.txt" -exec sed -i 's/old_str/new_str/g' {} + - macOS:
删除备份文件:find . -type f -name "*.txt" -exec sed -i.bak 's/old_str/new_str/g' {} +find . -name "*.txt.bak" -delete
特殊场景处理
- 含特殊字符的字符串:如果要替换的字符串包含
/、&这类特殊符号,可以换用其他分隔符(比如#),避免转义麻烦:sed -i 's#old/str#new&str#g' *.txt - 忽略大小写替换:添加
I选项实现不区分大小写的替换:sed -i 's/old_str/new_str/gI' *.txt - 测试替换效果:不想直接修改文件的话,去掉
-i选项,将替换结果输出到终端预览:sed 's/old_str/new_str/g' test.txt
内容的提问来源于stack exchange,提问作者oml
相关产品推荐
相关产品推荐

