当前位置:首页>Linux>运维效率翻倍:Linux中大批量文件内容替换秘籍

运维效率翻倍:Linux中大批量文件内容替换秘籍

  • 2026-10-11 15:20:52
运维效率翻倍:Linux中大批量文件内容替换秘籍
动动小手  点个关注~
在日常的系统运维中,我们经常需要对linux中的文件内容进行批量的修改或者替换,有些场景甚至需要大批量的文件内容进行修改或者替换,一个一个修改太麻烦,这时候就需要使用批量替换命令。常用的替换命令有vim、sed、awk以及和find及grep等命令组合使用。
01
vim编辑命令
vim命令。没错就是我们经常用的vim命令,它不但可以编辑文件,还可以实现类似windows中的CTRL+H形式将文本的关键词进行批量替换。一般用在单个文件中。
语法格式:
:%s/旧字符串/新字符串/g             #替换全文:s/旧字符串/新字符串/g              #替换当前行:1,10s/旧字符串/新字符串/g          #替换1-10行
下面演示一个,将123.txt中的hi替换为hello,在正常模式输入:%s/hi/hello/g , 回车就完成替换,记得保存。
02
sed命令
sed是一种流编辑器,它是文本处理中非常有用的工具,能够完美的配合正则表达式使用,功能不同凡响。号称瑞士军刀,是linux三剑客之一。sed主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等。
sed功能太过于强大,本文主要讲日常使用的几个sed命令,后期有空了单独讲一次sed。
sed 's/旧内容/新内容/g'   #查看替换结果,并不修改源文件sed 's/旧内容/新内容/g' > 新文件  #将源文件替换后定向输入为新文件,不修改源文件sed -i 's/旧内容/新内容/g' #直接在源文件中进行修改
sed 命令中的s表示替换,g表示全局替换。
sed -i 's/旧内容/新内容/gi'  #全局替换后面增加参数i,表示不区分大小写
sed -i 'ns/旧内容/新内容/g'    #前面增加n表示替换第n行的内容sed -i '1,ns/旧内容/新内容/g' #替换1-n行的内容
sed -i 's/旧内容/新内容/g' *.txt   将当前目录所有的txt文件的内容进行替换
如将bak目录下所有txt文件中的xian替换为shenzhen。
03
awk命令
awk是一个强大的文本分析工具,相当于grep的查找和sed的编辑功能,也是linux三剑客之一。通过awk也可以实现文件内容的批量替换。awk一般适合处理结构化文件,如日志文件或者csv文件,它可以单独进行列替换,在处理一些特殊情况的文件时比较有用。
awk '{gsub(/原内容/, "新内容"); print}' 文件名 > 新文件  将替换后的文件输出至新文件

gsub代表全局替换,print代表打印。

awk '{gsub(/shanghai/, "zhejiang"); print}' 123.txt > 222.txt
批量替换某一列的值
awk '{gsub(/原内容/, "新内容",第N列); print}' 文件名 > 新文件  #替换后的文件输出至新文件
如,将yum.log-20260102文件中第三列全部替换为Updated。
awk '{gsub(/Installed/, "Updated",$4); print}' yum.log-20260102 > 444.txt
如果是逗号为分隔符,可以加-F 参数
awk -F',' '{gsub(/Installed/, "Updated",$4); print}' yum.log-20260102 > 444.txt
04
组合命令
1、和find命令的组合
find . -name ".txt" -exec sed -i 's/wuhan/hangzhou/g' {} \; #批量替换指定目录所有txt中的关键
当然也可以将替换的文本进行进一步的处理。
2、和grep命令的组合
grep -rl '旧内容' /path/*.txt | xargs sed -i 's/旧内容/新内容/g' #批量替换指定目录下txt中的旧内容

如:将/data/bak/目录中txt文件中的guangdong替换为fujian。

grep -rl 'guangdong' /data/bak/*.txt | xargs sed -i 's/guangdong/fujian/g' 

检查发现/data/bak/下txt中的guangdong已全部替换为fujian。

当然也还有其他很多种用法,具体需要结合实际情况进行处理。

05
注意事项

1、在生产环境操作时候注意对重要文件进行备份。例如sed可以使用sed -i bak命令自动生成备份。

2、如果转换内容包含特殊字符(如/,$,&),需要进行转译。或者像sed那样使用间隔符。

3、在批量执行前,先测试,如sed命令,执行前先不加-i参数。预览无误后再执行操作。

最新文章

随机文章