Mehrere Zeilen mittels sed überschreiben

Fabian Lesniak - Samstag, 12. September 2009 18:53:46 - 3 Antworten

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!

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: 127 Punkte bei 124 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: 289 Punkte bei 53 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: 226 Punkte bei 60 Stimmen.
Den Beitrag bewerten: Gut / Schlecht

Ähnliche Artikel

  • Sauber verzahnt
    Verbinden, trennen, umformatieren: Unter Linux gibt es zahlreiche kleine Helfer, die die Arbeit mit Textdateien perfekt beherrschen – und die dazu noch perfekt zusammenarbeiten.
  • 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.
  • Am Fließband
    Mit Sed editieren Sie Textdaten ohne interaktive Benutzeroberfläche – auch in Pipes oder der Eingabeumlenkung. In einer einzigen Zeile lassen sich umfangreiche Editierkommandos absetzen.
  • 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.
  • 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.

Aktuelle Fragen

KWord Quiz
Carl Garbe, 30.08.2016 16:19, 0 Antworten
KWord Quiz lässt sich bei mir (nach einem update auf Ubuntu 16.04 LTS) nicht mehr speichern, kann...
NOKIA N900 einziges Linux-Smartphone? Kein Support mehr
Wimpy *, 28.08.2016 11:09, 1 Antworten
Ich habe seit vielen Jahren ein Nokia N900 mit Maemo-Linux. Es funktioniert einwandfrei, aber ich...
Scannen nicht möglich
Werner Hahn, 19.08.2016 22:33, 3 Antworten
Laptop DELL Latitude E6510 mit Ubuntu 16,04, Canon Pixma MG5450. Das Drucken funktioniert, Scann...
Wie kann man das berichtigen
Udo Muelle, 17.07.2016 20:39, 1 Antworten
Fehlschlag beim Holen von http://extra.linuxmint.com/dists/rosa/main/binary-i386/Packages Hash-S...
Installation Genimotion
Horst Müller, 15.07.2016 17:00, 1 Antworten
Hallo, ich kann Genimotion nicht installieren. Folgende Fehlermeldung habe ich beim Aufruf erh...

Jetzt auf den Mailinglisten

Re: [EasyLinux-Suse] Grub 2
Horst Schwarz, 30.08.2016 14:46
Hallo Matthias, danke für dein Mail mit der ausführlichen Beschreibung, was zu tun ist. Ich werde es genauso d...
Re: [EasyLinux-Suse] Grub 2
Matthias, 29.08.2016 23:14
Hallo, Am Sonntag, 28. August 2016, 16:31:16 schrieb Horst Schwarz: > Hallo Matthias, > vielen Dank...
Re: [EasyLinux-Suse] Grub 2
Horst Schwarz, 29.08.2016 12:33
Hallo Heinrich, vielen Dank für diesen Lösungsweg. Das macht Sinn!! GrußHorst -----Original-Nachricht-----...
Re: [EasyLinux-Suse] Grub 2
Heinrich Baumann, 29.08.2016 12:06
Hallo, ich schlage vor, die jetzige Platte auf die neue zu klonen - Windows und Linux-. z.B. mit Clonezilla od...
[EasyLinux-Suse] Quake4 LEAP42.1
"101.30750@germanynet.de", 28.08.2016 23:54
Hallo weil wohl durch das Wort D***e der Thread vorzeitig beendet wurde, hier meine Frage noch mal. Ich w...