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




