替換文件中的某個參數,通常使用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