在 Linux 系统中,有几种常用方法可以批量替换多个文件中的内容。以下是几种高效的方法:
# 替换当前目录下所有文件中匹配的字符串
sed -i 's/原字符串/新字符串/g' *
# 递归替换当前目录及子目录下所有文件
find . -type f -exec sed -i 's/原字符串/新字符串/g' {} +
注意事项:
- -i
表示直接修改文件内容
- s
表示替换操作
- g
表示全局替换(每行所有匹配项)
- 可以使用 -i.bak
创建备份文件
# 只处理特定扩展名的文件(如 .txt)
find . -name "*.txt" -exec sed -i 's/原字符串/新字符串/g' {} +
# 排除某些目录
find . -type f -not -path "./exclude_dir/*" -exec sed -i 's/原字符串/新字符串/g' {} +
# 先查找包含特定字符串的文件,然后替换
grep -rl '原字符串' . | xargs sed -i 's/原字符串/新字符串/g'
# 替换当前目录下所有文件
perl -pi -e 's/原字符串/新字符串/g' *
# 递归替换
find . -type f -exec perl -pi -e 's/原字符串/新字符串/g' {} +
# 需要先安装 ripgrep (sudo apt install ripgrep)
rg -l '原字符串' | xargs sed -i 's/原字符串/新字符串/g'
-i.bak
选项/
等特殊字符,可以使用其他分隔符如 |
或 #
bash
sed -i 's|原/字符串|新/字符串|g' *
# 将所有 .html 文件中的 "http://old.com" 替换为 "https://new.com"
find . -name "*.html" -exec sed -i 's|http://old.com|https://new.com|g' {} +
# 将当前目录下所有文件中的 "foo" 替换为 "bar",并创建备份文件
sed -i.bak 's/foo/bar/g' *
选择哪种方法取决于你的具体需求和系统环境。对于简单的替换,直接使用 sed 通常就足够了;对于更复杂的场景,find 和 grep 的组合可能更灵活。