Suchen und Ersetzen eines Wertes in einer Textzeile

Suchen und Ersetzen eines Wertes in einer Textzeile

Ich habe eine Textdatei, die nur 1 Textzeile enthält

1314:Battery:1.90:50:30

Ich versuche herauszufinden, ob es irgendwie möglich ist grep, seddie Werte 50 und 30 wie folgt zu ändern:

1314:Battery:1.90:45:35

wobei ich 5 von 50 reduzieren und 5 von 30 erhöhen würde.

Bitte sagen Sie mir, ob es eine bessere Möglichkeit gibt, dieses Problem zu lösen. Ich habe gerade angefangen, mich mit diesem Scripting zu beschäftigen. Danke =)

Antwort1

awk -F":" '{OFS=":"; print $1,$2,$3,$4-5,$5+5}' filename

Ausgabe:

1314:Batterie:1.90:45:35

Antwort2

Mit perl:

perl -i -F: -lape '$F[3]-=5;$F[4]+=5;$_=join ":",@F' the-file

Dabei shgilt (unter der Annahme, dass es sich bei diesen Zahlen immer um Dezimalzahlen ohne führende Nullen handelt):

IFS=: read -r a b c d e < the-file &&
  printf '%s\n' "$a:$b:$c:$((d-5)):$((e+5))" > the-file

Mit neueren Versionen von GNU awk:

gawk -i /usr/share/awk/inplace.awk -F: -vOFS=: '{$4-=5;$5+=5}1' the-file

Verwende nicht-i inplaceas versucht zunächst, die Erweiterung (as oder ) aus dem aktuellen Arbeitsverzeichnis gawkzu laden , wo jemand Malware platziert haben könnte. Der Pfad der mit gelieferten Erweiterung kann je nach System unterschiedlich sein, siehe die Ausgabe voninplaceinplaceinplace.awkinplacegawkgawk 'BEGIN{print ENVIRON["AWKPATH"]}'

verwandte Informationen