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
posted @ 2021-02-07 15:39  逆流的鱼2016  阅读(1787)  评论(0编辑  收藏  举报