动动小手
点个关注~在日常的系统运维中,我们经常需要对linux中的文件内容进行批量的修改或者替换,有些场景甚至需要大批量的文件内容进行修改或者替换,一个一个修改太麻烦,这时候就需要使用批量替换命令。常用的替换命令有vim、sed、awk以及和find及grep等命令组合使用。vim命令。没错就是我们经常用的vim命令,它不但可以编辑文件,还可以实现类似windows中的CTRL+H形式将文本的关键词进行批量替换。一般用在单个文件中。:%s/旧字符串/新字符串/g #替换全文:s/旧字符串/新字符串/g #替换当前行:1,10s/旧字符串/新字符串/g #替换1-10行
下面演示一个,将123.txt中的hi替换为hello,在正常模式输入:%s/hi/hello/g , 回车就完成替换,记得保存。sed是一种流编辑器,它是文本处理中非常有用的工具,能够完美的配合正则表达式使用,功能不同凡响。号称瑞士军刀,是linux三剑客之一。sed主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等。sed功能太过于强大,本文主要讲日常使用的几个sed命令,后期有空了单独讲一次sed。sed 's/旧内容/新内容/g' #查看替换结果,并不修改源文件sed 's/旧内容/新内容/g' > 新文件 #将源文件替换后定向输入为新文件,不修改源文件sed -i '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。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
awk -F',' '{gsub(/Installed/, "Updated",$4); print}' yum.log-20260102 > 444.txt
find . -name ".txt" -exec sed -i 's/wuhan/hangzhou/g' {} \; #批量替换指定目录所有txt中的关键
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。
当然也还有其他很多种用法,具体需要结合实际情况进行处理。
1、在生产环境操作时候注意对重要文件进行备份。例如sed可以使用sed -i bak命令自动生成备份。
2、如果转换内容包含特殊字符(如/,$,&),需要进行转译。或者像sed那样使用间隔符。
3、在批量执行前,先测试,如sed命令,执行前先不加-i参数。预览无误后再执行操作。