Mehrere Zeilen mittels sed überschreiben

Autor

Samstag, 12. September 2009 18:53:46

Hallo zusammen!
Ich versuche seit einer Weile, in einer Textdatei verschiedene Zeilen mittels einem sed-Einzeiler zu verändern:

Der Original-Text sieht ungefähr so aus:

stat {
entry {
type = normal;
name = one;
statistic {
rs = cnrg;
tr {
s = 0;
}
yf {
s = 0;
}
tx {
s = 0;
}
tw {
s = 0;
}
km {
s = 0;
}
cm {
s = 0;
}
tt {
s = 0;
}
ut = 0w;
} {
type = normal;
name = two;
statistic {
rs = cnrg;
tr {
s = 5216;
}
yf {
s = 3424;
}
tx {
s = 1102;
}
tw {
s = 78054;
}
km {
s = 4400;
}
cm {
s = 190;
}
tt {
s = 11238;
}
ut = 120405023w;
}
}

Man sieht, dass beim ersten Eintrag jedes Mal s=0 gesetzt wird, beim zweiten sind es jedoch ziemlich wirre Werte. Jetzt möchte ich per sed alle s=... durch s=0 ersetzen, ohne dass weitere Einträge (z.b. name=three usw.) verändert werden, also nur die paar Zeilen unter name=two.
Ich habe schon versucht, die Zeile per
A=$(grep -n "two" | awk -v FS=":" '{print $1}')
die Zeilennummer von name=two herauszufinden und dann mit:
sed -e '$[$A+4]d;$[$A+5]\ s = 0 ;
die erste Zeile zu ersetzen, aber das geht doch auch sicher noch einfacher, gleich für alle Zeilen und am besten ohne awk. Ich bin für jeden Tipp dankbar!

Fabian Lesniak

3 Antworten


Antworten
Mehrere Zeilen mittels sed überschreiben
Roland M. Egloff, Samstag, 12. September 2009 21:10:30
Ein/Ausklappen

Hallo Fabian,

Folgendes sollte funktionieren:

sed -i 's/$s\ *=\ *[0-9][0-9]*;/s=0;/' filename.txt

Bemerkungen:

sed -i 's/von/nach/g' filename.txt

"-i" = input file wird editiert (!!! also vorher ein Backup machen !!!)

"$" = Anfang einer Zeile

"\ *" = 0 oder mehrere Lehrzeichen (\ space *)

"[0-9][0-9]*" = mindestens eine Zahl

Gruss

Roland



Bewertung: 65 Punkte bei 21 Stimmen.
Den Beitrag bewerten: Gut / Schlecht
-
Re: Mehrere Zeilen mittels sed überschreiben
Roland M. Egloff, Samstag, 12. September 2009 21:14:29
Ein/Ausklappen

Hallo Fabian,

!!!Korrektur!!!

sed -i 's/^s\ *=\ *[0-9][0-9]*;/s=0;/' filename.txt

"^" = Anfang einer Zeile

("$" = Ende einer Zeile)

Gruss

Roland



Bewertung: 208 Punkte bei 9 Stimmen.
Den Beitrag bewerten: Gut / Schlecht
-
Re: Mehrere Zeilen mittels sed überschreiben
Fabian Lesniak, Samstag, 12. September 2009 22:10:18
Ein/Ausklappen

Vielen Dank Roland!
Es hat fast funktioniert, weil das CMS hier die Leerzeichen vor s=... "weggeschnitten" hat. Du hast mir aber sehr geholfen und ich konnte das hier basteln:
sed -i 's/^\ *s\ *=\ *[0-9][0-9]*;/s=0;/' filename.txt
Das hat dann auch wunderbar funktioniert.

Gruß
Fabian


Bewertung: 100 Punkte bei 22 Stimmen.
Den Beitrag bewerten: Gut / Schlecht

Ähnliche Artikel

  • Farben in LaTeX kreativ nutzen mit dem Paket Xcolor
    Mit dem Paket Xcolor treiben Sie es in LaTeX bunt: Die umfangreichen Möglichkeiten erlauben einen kreativen Umgang mit Farben.
  • Einführung in Vi(m)
    Der Texteditor Vim ist nicht nur unter Linux-Nutzern sehr populär. Auch andere Programme nutzen das gleiche Bedienkonzept – ein Grund, es genauer unter die Lupe zu nehmen.
  • Monitoring mit Sighttpd und Ffmpeg
    Um Bilder oder Töne übers Web zu übertragen, braucht es keine aufwändige Infrastruktur. Sighttpd und ein passendes Kommandozeilen-Tool erledigen diese Arbeit schnell und zuverlässig.
  • Sicher hinterlegt
    Das auf schnelle Transfers hin optimierte Programm Tarsnap hilft beim Backup wichtiger Daten. Die verschlüsselten Dateien legt es in Amazon S3 Cloud ab – zu moderaten Preisen.
  • Check inklusive
    Wer mit Python programmiert, bekommt mit dem Doctest-Modul eine einfache Möglichkeit, die Programmfunktionen anschaulich zu dokumentieren und gleichzeitig zu testen.

Tipp der Woche

Grammatikprüfung in LibreOffice nachrüsten
Grammatikprüfung in LibreOffice nachrüsten
Tim Schürmann, 24.04.2015 19:36, 0 Kommentare

LibreOffice kommt zwar mit einer deutschen Rechtschreibprüfung und einem guten Thesaurus, eine Grammatikprüfung fehlt jedoch. In ältere 32-Bit-Versionen ...

Aktuelle Fragen

Zu wenig Speicherplatz auf /boot unter MATE
Patrick Obenauer, 25.05.2015 14:28, 1 Antworten
Hallo zusammen, ich habe Ubuntu 14.10 mit MATE 1.8.2 (3.16-37) mit Standardeinstellungen aufgese...
Konsole / Terminal in Linux Mint 17.1 deutsch
Dirk Resag, 09.05.2015 23:39, 12 Antworten
Hallo an die Community, ich habe vor kurzem ein älteres Notebook, Amilo A1650G, 1GB Arbeitsspe...
Admin Probleme mit Q4os
Thomas Weiss, 30.03.2015 20:27, 6 Antworten
Hallo Leute, ich habe zwei Fragen zu Q4os. Die Installation auf meinem Dell Latitude D600 verl...
eeepc 1005HA externer sound Ausgang geht nicht
Dieter Drewanz, 18.03.2015 15:00, 1 Antworten
Hallo LC, nach dem Update () funktioniert unter KDE der externe Soundausgang an der Klinkenbuc...
AceCad DigiMemo A 402
Dr. Ulrich Andree, 15.03.2015 17:38, 2 Antworten
Moin zusammen, ich habe mir den elektronischen Notizblock "AceCad DigiMemo A 402" zugelegt und m...

Jetzt auf den Mailinglisten

Re: [EasyLinux-Ubuntu] [erledigt] Xfce 4.10: Starter anders anordnen
Hartmut Haase, 30.05.2015 18:06
Hallo Gerhard, > Hast Du schon probiert (wie in einer früheren Mail angeregt), das Ganzer > bei einem...
Re: [EasyLinux-Ubuntu] Monitorempfehlung [erledigt]
Joachim Puttkammer, 30.05.2015 17:43
Am Donnerstag, 14. Mai 2015 schrieb Matthias Müller: Hallo, der neue Monitor ist hier, ein ASUS VX239h. H...
Re: [EasyLinux-Suse] Yast
Thomas Lueck, 29.05.2015 23:50
Am Freitag, den 29.05.2015, 23:20 +0200 schrieb Daniel Hegenbarth: > Ich habe die Liste gelöscht und alle...
Re: [EasyLinux-Suse] Yast
Daniel Hegenbarth, 29.05.2015 23:20
Ich habe die Liste gelöscht und alle Adressen neu eingegeben. Ergebnis bleibt wie gestern. Fehlerkode: Con...
Re: [EasyLinux-Suse] Yast
Daniel Hegenbarth, 29.05.2015 23:14
Ist heute genau das gleiche wie gestern. Auf dem Smartphone kann ich die URL öffnen, mit dem Computer nicht....