Ich habe Datei wie folgt in Variable (wir ${var_file}
sagen):Regex innerhalb sed innen für den Zyklus in bash auf Datei angewendet
ABC+123+456+789+12'\r
DEF+987+98790+12+00'\r
GHI+12+12?+39+123498345+21+1'\r
ABC+485+2?'\r
ABC+34?+8kj+3949+1+sdfkj+sdfkj'\r
GHC+++sdf'\r
ABC+123++235+5435'\r
ich auch eine Variable $var1
enthält Nummer im INT-Format haben und $var2
enthält Beginn Linie.
Ich brauche einen sed-Befehl (oder awk/cut?) Oder eine Funktion, die Teil der Bash-Skript sein, die $var1
Position zwischen +
Begrenzungszeichen auf $var2
Zeilenanfang (zB ABC
oder ABC+123
), global auf die Datei ersetzen (für alle möglichen Linien). Es gibt auch die Möglichkeit ?+
, da ?
Escape-Zeichen ist, so in diesem Fall +
funktioniert nicht als Trennzeichen, es ist normaler Text. Linien sollten immer lang genug sein, um +
zählen in $var1
für ausgewählte Linie Start in $var2
enthalten.
Ausgabebeispiel für Position 3 ($var1 = "3"
zwischen 3. und 4. +
) auf der Leitung mit ABC+123
($var2 = "ABC+123"
) beginnend
Daher sollte ausgegeben werden:
ABC+123+456++12'\r
DEF+987+98790+12+00'\r
GHI+12+12?+39+123498345+21+1'\r
ABC+485+2?'\r
ABC+34?+8kj+3949+1+sdfkj+sdfkj'\r
GHC+++sdf'\r
ABC+123+++5435'\r
Die Änderung auf Leitung 1 ist und Zeile 7.
Im Falle nur löschen 3. Position ($var1 = "3"
) on line beginnend mit ABC
($var2 = "ABC"
):
ABC+123+456++12'\r
DEF+987+98790+12+00'\r
GHI+12+12?+39+123498345+21+1'\r
ABC+485+2?'\r
ABC+34?+8kj+3949++sdfkj+sdfkj'\r
GHC+++sdf'\r
ABC+123+++5435'\r
Die Änderung auf der Linie 1, 5 und 7
Kann mir jemand helfen mit diesem? Ich habe verschiedene sed Befehle ausprobiert und kann einfach keine Lösung finden.
Danke!
Danke, es scheint es gut funktioniert. Ich werde es jetzt an mehr Beispielen ausprobieren. – Kaleb