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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM