替换文件中的某个参数,通常使用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