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: 122 Punkte bei 104 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: 275 Punkte bei 45 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: 211 Punkte bei 53 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

Welche Drucker sind Linux-mint kompatibel?
Johannes Nacke, 20.05.2016 07:32, 4 Antworten
Hallo Ihr Lieben, ich bitte um mitteilung welche Drucker Kompatibel sind mit Linux-Mint. LG Joh...
MS LifeCam HD-5000 an Debian
Kay Michael, 13.04.2016 22:55, 0 Antworten
Hallo, ich versuche die oben erwähnte Cam an einem Thin Client mit Debian zu betreiben. Linux...
Import von Evolution nach KMail erzeugt nur leere Ordner
Klaus-Christian Falkner, 06.04.2016 12:57, 3 Antworten
Hallo, da ich vor einiger Zeit von Ubuntu auf Kubuntu umgestiegen bin, würde ich gerne meine E...
Sophos lässt sich nicht unter Lubuntu installieren
Chrstina Turm, 30.03.2016 20:56, 3 Antworten
Hi Leute, habe mir vor paar Tagen auf ein Notebook, das ohne Linux ausgedient hätte, Linux dr...
Novell Client auf Raspbian
Chris Baum, 16.03.2016 15:13, 3 Antworten
Hallo Community, ich hätte eine Frage, und zwar geht es um folgendes: Ich möchte eine Datei...

Jetzt auf den Mailinglisten

[EasyLinux-Ubuntu] grosses Problem?
Wolfgang Tiedemann, 27.05.2016 20:25
Hallo Helferlein, heute nachmittag war im schon mit dem Rechner im Internet unterwegs. Alles lief gut. Habe...
Re: [EasyLinux-Ubuntu] Apple iPhone 4
alfred, 27.05.2016 19:03
Am 27.05.2016 um 18:55 schrieb Karl-Heinz: Hallo Karl-Heinz, > ich glaube das geht nur mit ITunes, einem...
Re: [EasyLinux-Ubuntu] Apple iPhone 4
Karl-Heinz, 27.05.2016 18:55
Am Fri, 27 May 2016 18:29:18 +0200 schrieb alfred : Hallo Alfred, ich glaube das geht nur mit ITunes, ein...
[EasyLinux-Ubuntu] Apple iPhone 4
alfred, 27.05.2016 18:29
Hallo Zusammen, ich möchte mein iPhone über Bluetooth mit dem PC verbinden. Als Gerät am PC wird es als Sm...
Re: [EasyLinux-Ubuntu] Sind wir noch online?
alfred, 27.05.2016 18:02
Am 27.05.2016 um 16:45 schrieb Frank von Thun: Hallo Frank, > Hallo Willy und Alle > Es ist zwar ve...