![Suchen und Ersetzen eines Wertes in einer Textzeile](https://rvso.com/image/36014/Suchen%20und%20Ersetzen%20eines%20Wertes%20in%20einer%20Textzeile.png)
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
, sed
die 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 sh
gilt (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 inplace
as versucht zunächst, die Erweiterung (as oder ) aus dem aktuellen Arbeitsverzeichnis gawk
zu laden , wo jemand Malware platziert haben könnte. Der Pfad der mit gelieferten Erweiterung kann je nach System unterschiedlich sein, siehe die Ausgabe voninplace
inplace
inplace.awk
inplace
gawk
gawk 'BEGIN{print ENVIRON["AWKPATH"]}'