Suchen nach String und Ersetzen zeilenweise

A

AlexNBG276

Jungspund
Hallo,

ich habe folgendes Problem:

ich möchte in einer großen Textdatei die zeilenweise folgendermaßen aufgebaut ist nach einem String suchen, und wenn eine Übereinstimmung gefunden ist, mehere Texte in der Zeile ersetzen. Zur Veranschaulichung:

aus
Text1;Text2;Text3;Text4;Text5;Text6

wenn bei "Text3" eine Übereinstimmung gefunden wurde, soll werden

neuerText1;Text2;neuerText3;Text4;Text5;Text6

(Jede Zeile hat die gleiche Anzahl von "Text-Strings" (durch Simikolon von einander getrennt))

Ich denke, das kann man mit "sed" machen...

Freue mich über Eure Hinweise/Hilfe!
 
Hallo,
wenn es nur nach der 3. Spalte geht:
Code:
sed 's/.*;\(.*\);Text3;/neuerText1;\1;neuerText3;' file
 
Dankeschön,

ok, habe mich vorhin verschrieben - suche nach Übereinstimmung in Text4, muss es denn so aussehen?

sed 's/.*;\(.*\);Text4;/neuerText1;\1;\2;neuerText4;' file

sind den \1;\2; die Platzhalter für die Spalten 2 und 3, in denen nichts ersetz wird?
 
Nein, wenn du bei dem Muster einen Ausdruck mit \( \) umschließt, kannst du den ersten umschlossenen Ausdruck mit \1 wieder einfügen den zweiten mit \2 usw.
Das ganze würde dann so aussehen:
Code:
sed 's/.*;\(.*;.*\);Text4/neuerText1;\1;neuerText4/' test
 
Ich find das mit awk wesentlich klarer zu sehen was da abläuft:
Code:
echo 'Text1;Text2;Text3;Text4;Text5;Text6' |
awk -F';' '{if ($3 == "Text3") { printf "%s;%s;%s;%s;%s;%s\n", "neuerText1", $2, "neuerText3", $4, $5, $6 }}'
oder auch so: (muss man allerdings den output field seperator (OFS) auf ";" stellen)
Code:
echo 'Text1;Text2;Text3;Text4;Text5;Text6' |
awk -F';' 'BEGIN{OFS=";"} {if ($3 == "Text3") {$1 = "neuerText1"; $3 = "neuerText3"; print $0}}'

Man testet hier offensichtlich die dritte Spalte auf das Auftreten eines bestimmten Strings und verändert dann nur Spalte 1 und 3.
(Ich benutz hier gawk, nur zur info.)
 

Ähnliche Themen

Hilfe bei bash - Shellscript gesucht: zusammengehörende Strings in Konfigdatei

Zeilen löschen und ersetzen mit sed

suchen und ersetzen, Format erhalten

Sed od. Awk - Ersetzen unbekannter parameter

sed/tr: Zeilenumbruch mit führendem Bindestrich ersetzen

Zurück
Oben