![尋找並取代一行文字中的值](https://rvso.com/image/36014/%E5%B0%8B%E6%89%BE%E4%B8%A6%E5%8F%96%E4%BB%A3%E4%B8%80%E8%A1%8C%E6%96%87%E5%AD%97%E4%B8%AD%E7%9A%84%E5%80%BC.png)
我有一個僅包含 1 行文字的文字文件
1314:Battery:1.90:50:30
我試圖弄清楚是否有辦法執行 agrep
並將sed
值 50 和 30 更改為以下值
1314:Battery:1.90:45:35
我將從 50 減少 5,從 30 增加 5。
請指導我是否有更好的方法來解決這個問題?我剛開始學習這個腳本。謝謝=)
答案1
awk -F":" '{OFS=":"; print $1,$2,$3,$4-5,$5+5}' filename
輸出:
1314:電池:1.90:45:35
答案2
和perl
:
perl -i -F: -lape '$F[3]-=5;$F[4]+=5;$_=join ":",@F' the-file
sh
(假設這些數字總是不帶前導零的十進制整數):
IFS=: read -r a b c d e < the-file &&
printf '%s\n' "$a:$b:$c:$((d-5)):$((e+5))" > the-file
使用最新版本的 GNU awk
:
gawk -i /usr/share/awk/inplace.awk -F: -vOFS=: '{$4-=5;$5+=5}1' the-file
不使用-i inplace
as嘗試先從目前工作目錄gawk
載入inplace
擴充功能(asinplace
或),有人可能已經在其中植入了惡意軟體。隨系統提供的擴展inplace.awk
的路徑可能會有所不同,請參閱輸出inplace
gawk
gawk 'BEGIN{print ENVIRON["AWKPATH"]}'