You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Bash/sed/grep/find基础脚本递归替换指定文件内容?

最简单的Bash实现方法

这题我熟!用find搭配sed就能搞定,一行命令就够,而且都是基础工具,完全匹配你的需求:

find /your/starting/folder -name "file.txt" -type f -exec sed -i 's/Foo/Bar/g' {} +

拆解一下每个部分的作用:

  • /your/starting/folder:把这个替换成你实际要开始遍历的文件夹路径(比如.代表当前目录)
  • -name "file.txt":精确匹配名为file.txt的文件,大小写敏感(如果需要忽略文件名大小写可以换成-iname,但你要的是指定名称,所以用-name刚好)
  • -type f:只处理普通文件,避免误操作目录或其他特殊文件
  • -exec sed -i 's/Foo/Bar/g' {} +:对找到的所有文件执行sed替换:
    • -i:原地修改文件内容(不用生成临时文件)
    • s/Foo/Bar/g:全局替换所有大小写敏感的Foo为Bar(g表示全局,不加的话只替换每行第一个匹配项;这里没加i选项,所以严格区分大小写,完全符合你的要求)
    • {} +:把所有找到的文件一次性传给sed,比{} \;逐个处理更高效

额外实用提示:

  • 如果想备份原文件(生成比如file.txt.bak),只需要给sed的-i加后缀:
    find /your/starting/folder -name "file.txt" -type f -exec sed -i.bak 's/Foo/Bar/g' {} +
    
    替换完成后,要是确认没问题,可以用这条命令批量删除备份:
    find /your/starting/folder -name "file.txt.bak" -delete
    
  • 如果遇到权限不足的报错,可以加上-perm -u+w只筛选当前用户可写的文件,或者在命令前加sudo(谨慎使用,避免误改系统文件)
  • 要是想先预览替换效果再执行,可以去掉-i选项,sed会把修改后的内容输出到终端,不会改动原文件:
    find /your/starting/folder -name "file.txt" -type f -exec sed 's/Foo/Bar/g' {} \;
    

内容的提问来源于stack exchange,提问作者M.E.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:30:29