• 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
    
    ***************用努力照亮现实的梦!***********************
  • 相关阅读:
    Centos下 安装和测试kafka
    Java枚举
    Java 数组
    Java变量
    Java标识符
    Java修饰符
    java 基本语法
    Java 基础语法
    Java开发工具
    JAVA 发展历史
  • 原文地址:https://www.cnblogs.com/orange2016/p/14385445.html
Copyright © 2020-2023  润新知