Shell 脚本逐行替换文件中的某一参数值
替换文件中的某个参数,通常使用linux文本处理工具, awk 、sed 和 grep,可根据实际需要组合使用命令。
#!/bin/bash
#获取文件,通过脚本参数引入
file=/data/test.log
#获取文件的行数
log_line=$(awk -F":" '{print NR}' $file)
#定义循环规则,文件有多少行,就循环多少次
for i in $log_line
do
#定义要用来替换旧数据的新数据,可根据实际需求自定义
log_new="\""GPSTESTTOCU$(( $i + 100000 ))"\""
#循环从每行获取旧数据,可根据实际需求,使用awk进行抓取,一次获取不到,可以多次使用awk,-F指定分隔符
log_old=$(awk -F":" '{if(NR=='$i') {print $2}}' $file |awk -F"," '{print $1}' )
#循环替换所在行的老数据,-e 使用变量替换 @是替换分割符,作用同斜线/相同,使用场景:被替换内容中包含斜线
sed -e "$i s@$log_old@$log_new@" -i $file
#显示新定义的数据
echo $log_new
done
#完成后打印结果
echo "Completed change log file. Done!!!"
替换json文件test.log某固定字段值
{"recvTs": 1626071361888,"ID": 0,"Msg": "","URL": "","initTimestamp": 1625740711917}
shell命令修改recvTs值, 将recvTs参数值所有数字替换为一个新的时间,("recvTs": )--参数名称,[0-9]*-- 表示所有数字,(,)--表示保留后面分隔符,1'1626071361999',--替换后的新字段,开头1表示"recvTs": 不变
sed -i 's/\("recvTs": \)[0-9]*\(,\)/\1'1626071361999',/g' test.log
***************用努力照亮现实的梦!***********************
本文来自博客园,作者:逆流的鱼2016,转载请注明原文链接:https://www.cnblogs.com/orange2016/p/14385445.html
分类:
IT 测试
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下