テキスト行内の値を検索して置換する

テキスト行内の値を検索して置換する

1行だけのテキストファイルがあります

1314:Battery:1.90:50:30

50と30の値を次のように変更する方法がgrepあるかどうかを調べようとしていますsed

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(これらの数値は常に先頭にゼロが付かない 10 進整数であると仮定します) :

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は、まず現在の作業ディレクトリから拡張機能(または)gawkをロードしようとしますが、そこに誰かがマルウェアを仕掛けている可能性があります。で提供される拡張機能のパスはシステムによって異なる場合があります。inplaceinplaceinplace.awkinplacegawkgawk 'BEGIN{print ENVIRON["AWKPATH"]}'

関連情報