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

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

1行のテキストのみを含むテキストファイルがあります。

1314:Battery:1.90:50:30

aをして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"]}'

関連情報