You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Ubuntu 22.04下批量替换同文件夹内200+文件中的指定文本

Ubuntu 22.04下批量替换同文件夹内200+文件中的指定文本

嘿,这个需求太常见啦!在Ubuntu 22.04下批量替换文件夹里200多个文件的指定文本,有几个简单好用的方法,我给你详细讲讲~

方法一:用sed命令批量替换(最常用)

sed是Linux系统里处理文本的老牌神器,不用额外安装,终端直接就能用。

  • 只处理当前文件夹下的所有文件(不含子文件夹):
    直接运行这条命令就行,把里面的「旧文本」和「新文本」换成你实际需要的内容:

    sed -i 's/旧文本/新文本/g' *
    

    给你拆解下参数:

    • -i:表示直接修改原文件内容(原地替换),不用生成临时文件
    • s/旧/新/g:核心替换规则,g代表全局替换(一行里多次出现的旧文本都会被换掉,不加g的话只换每行第一个匹配项)
    • *:匹配当前文件夹下的所有文件
  • 需要递归处理子文件夹里的文件:
    结合find命令就能实现遍历所有子目录的文件,命令如下:

    find . -type f -exec sed -i 's/旧文本/新文本/g' {} +
    

    解释下:

    • .:从当前目录开始搜索
    • -type f:只处理文件,跳过文件夹
    • -exec ... {} +:把找到的所有文件批量传给sed处理,效率比逐个处理高

⚠️ 关键提醒:怕操作失误搞坏文件?可以先自动生成备份!把-i改成-i.bak,这样替换后会保留原文件的备份(后缀是.bak),命令如下:

sed -i.bak 's/旧文本/新文本/g' *

等你确认替换没问题后,再用rm *.bak删掉所有备份文件就行。

方法二:用rpl工具(更直观的批量替换)

如果觉得sed的语法有点绕,试试rpl——这个工具专门为批量文本替换设计,参数更直白,新手友好。

首先得先安装它:

sudo apt update && sudo apt install rpl
  • 替换当前文件夹所有文件的文本:

    rpl "旧文本" "新文本" *
    
  • 递归替换子文件夹里的文件:
    加个-R参数就搞定:

    rpl -R "旧文本" "新文本" .
    

一些额外注意事项

  • 如果你的文本里包含特殊字符(比如/*&),记得用反斜杠\转义,或者用单引号把文本包裹起来(避免shell解析特殊字符)。比如要替换/usr/local/opt/local,在sed里要写成s\/usr\/local\/opt\/local/g,用rpl的话直接rpl '/usr/local' '/opt/local' *就行。
  • 只想处理特定类型的文件?比如只替换.md.txt文件,把命令里的*换成*.md*.txt就行。用find的话可以加-name "*.txt",比如:
    find . -type f -name "*.txt" -exec sed -i 's/旧文本/新文本/g' {} +
    

备注:内容来源于stack exchange,提问作者D-T

火山引擎 最新活动