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: 103 Punkte bei 6 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: 124 Punkte bei 4 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: 65 Punkte bei 6 Stimmen.
Den Beitrag bewerten: Gut / Schlecht

Ähnliche Artikel

  • 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.
  • 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.
  • 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

Schnell Multi-Boot-Medien mit MultiCD erstellen
Schnell Multi-Boot-Medien mit MultiCD erstellen
Tim Schürmann, 24.06.2014 12:40, 0 Kommentare

Wer mehrere nützliche Live-Systeme auf eine DVD brennen möchte, kommt mit den Startmedienerstellern der Distributionen nicht besonders weit: Diese ...

Aktuelle Fragen

Artikelsuche
Erwin Ruitenberg, 09.10.2014 07:51, 1 Antworten
Ich habe seit einige Jahre ein Dugisub LinuxUser. Dann weiß ich das irgendwann ein bestimmtes Art...
Windows 8 startet nur mit externer Festplatte
Anne La, 10.09.2014 17:25, 4 Antworten
Hallo Leute, also, ich bin auf folgendes Problem gestoßen: Ich habe Ubuntu 14.04 auf meiner...
Videoüberwachung mit Zoneminder
Heinz Becker, 10.08.2014 17:57, 0 Antworten
Hallo, ich habe den ZONEMINDER erfolgreich installiert. Das Bild erscheint jedoch nicht,...
internes Wlan und USB-Wlan-Srick
Gerhard Blobner, 04.08.2014 15:20, 2 Antworten
Hallo Linux-Forum: ich bin ein neuer Linux-User (ca. 25 Jahre Windows) und bin von WIN 8 auf Mint...
Server antwortet mit falschem Namen
oin notna, 21.07.2014 19:13, 1 Antworten
Hallo liebe Community, Ich habe mit Apache einen Server aufgesetzt. Soweit, so gut. Im Heimnet...

Jetzt auf den Mailinglisten

Re: [EasyLinux-Ubuntu] pdf-Dateien_öffnen
Rainer, 24.10.2014 17:00
Am Fri, 24 Oct 2014 16:15:32 +0200 schrieb Richard Kraut : > Am Mittwoch, den 22.10.2014, 09:34 +0200 sc...
Re: [EasyLinux-Ubuntu] zukünftiger__Standard-Desktop_bei_Debian?
Richard Kraut, 24.10.2014 16:29
Am Dienstag, den 21.10.2014, 18:27 +0200 schrieb Uwe Herrmuth: > Aber gut zu wissen, dass es im Falle eine...
[EasyLinux-Ubuntu] Recoll: Fehler bei Indizierung
Rainer, 24.10.2014 16:27
Hallo zuammen, habe jetzt ein paar Anläufe hinter mir, Recoll indizieren zu lassen (Index-Update), aber es...
Re: [EasyLinux-Ubuntu] zukünftiger__Standard-Desktop_bei_Debian?
Richard Kraut, 24.10.2014 16:23
Am Mittwoch, den 22.10.2014, 23:19 +0200 schrieb Matthias Müller: > btw: Debian hatte von Anfang an Gnome...
Re: [EasyLinux-Ubuntu] pdf-Dateien_öffnen
Richard Kraut, 24.10.2014 16:15
Am Mittwoch, den 22.10.2014, 09:34 +0200 schrieb Rainer: > Klingt folgerichtig. Trotzdem: Die AR-Version 9...