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: 145 Punkte bei 161 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: 281 Punkte bei 89 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: 198 Punkte bei 83 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.
  • Immer schön der Reihe nach
    Bei der Arbeit mit strukturierten Textdateien bietet Miller eine clevere Alternative zu herkömmlichen Werkzeugen wie Grep, Cut, Sed und anderen.
  • 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.
  • 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.
  • 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.

Aktuelle Fragen

Probleme mit der Maus
Thomas Roch, 21.02.2017 13:43, 1 Antworten
Nach 20 Jahren Windows habe ich mich zu Linux Ubuntu probeweise durchgerungen!!! Installation - k...
KWin stürzt ab seit Suse Leap 42.2
Wimpy *, 21.02.2017 09:47, 4 Antworten
OpenSuse 42.2 KDE 5.8.3 Framework 5.26.0 QT 5.6.1 Kernel 4.4.46-11-default 64-bit Open-GL 2....
Shell-Befehl zur Installation von Scanner-Treiber
Achim Zerrer, 15.02.2017 12:13, 10 Antworten
Hallo, ich habe Einen Brother Drucker mit Scanner. Nachdem ich mit Hilfe der Community den Druck...
kiwix öffnet ZIM Datei nicht
Adrian Meyer, 13.02.2017 18:23, 1 Antworten
Hi, ich nutze Zim Desktop für mein privates Wiki. Fürs Handy habe ich mir kiwix heruntergelade...
registration
Brain Stuff, 10.02.2017 16:39, 1 Antworten
Hallo, Das Capatcha auf der Registrierungsseite von linux-community ist derartig schlecht gema...

Jetzt auf den Mailinglisten

Re: [EasyLinux-Ubuntu] Claws_Mail:_Speichern_von_Anhängen
Rainer, 26.02.2017 10:44
Hallo Roman, Am Sun, 26 Feb 2017 10:09:56 +0100 schrieb Roman Brusa : > Hi, Rainer schrieb am Sun, 26...
Re: [EasyLinux-Ubuntu] Claws_Mail:_Speichern_von_Anhängen
Roman Brusa, 26.02.2017 10:09
Hi, Rainer schrieb am Sun, 26 Feb 2017 09:43:47 +0100: >gelegentlich bekomme ich Mails mit mehreren Anhäng...
[EasyLinux-Ubuntu] Claws_Mail:_Speichern_von_Anhängen
Rainer, 26.02.2017 09:43
Hallo zusammen, gelegentlich bekomme ich Mails mit mehreren Anhängen. Gibt es eigentlich eine Möglichkeit,...
Re: [EasyLinux-Ubuntu] Installation von Mint 18.1 geht nicht
Alfred Zahlten, 26.02.2017 01:09
???24??2?2?17????18?22?????????????????????????????????????????????????????????????????????????????????????????...
Re: [EasyLinux-Ubuntu] Installation von Mint 18.1 geht nicht
Rainer, 25.02.2017 18:30
Hallo zusammen, Am Sat, 25 Feb 2017 17:46:52 +0100 schrieb Uwe Herrmuth : > > Da sich hier auf d...