Hallo,
ich habe eine lange Textdatei.
In dieser Datei möchte ich einen Textblock, der einen definierten Anfang und Ende hat.
Diesen Bock möchte ich mit einem anderen Textblock, der die gleichen Anfang- und Ende-Strings hat ersetzen.
Da ich mit AWK bzw SED nicht viel erfahrung habe, wäre ich für Hilfestellung sehr dankbar
Wie könnte das aussehen.
Gruß fk
Textblöcke mit AWK oder SED ersetzen.
Re: Textblöcke mit AWK oder SED ersetzen.
Sind die Anfangs- und End-Marker eindeutig in der Datei? Also, gibt's die nur genau einmal?fiberkill hat geschrieben: In dieser Datei möchte ich einen Textblock, der einen definierten Anfang und Ende hat.
Nimm ed. Hier eine Beispielsession:Diesen Bock möchte ich mit einem anderen Textblock, der die gleichen Anfang- und Ende-Strings hat ersetzen.
Code: Alles auswählen
$ cat a
/dev/wd0a on / type ffs (local)
kernfs on /kern type kernfs (local)
serveme:/multimedia on /multimedia type nfs
serveme:/data on /data type nfs
serveme:/scratch on /scratch type nfs
$ ed -s a <<EOF
> /kernfs/,/data/c
> foo
> bar
> .
> w
> q
> EOF
$ cat a
/dev/wd0a on / type ffs (local)
foo
bar
serveme:/scratch on /scratch type nfs
$
Use ed once in a while!
Re: Textblöcke mit AWK oder SED ersetzen.
@Meillo
Erst einmal Danke. Könntest Du mir diese ed-Session etwas genauer erklären ??
Danke im Voraus.
Gruß fk
Erst einmal Danke. Könntest Du mir diese ed-Session etwas genauer erklären ??
Danke im Voraus.
Gruß fk
Re: Textblöcke mit AWK oder SED ersetzen.
Klar.fiberkill hat geschrieben:@Meillo
Erst einmal Danke. Könntest Du mir diese ed-Session etwas genauer erklären ??
Sind die cat-Kommandos (das erste und das letzte) klar? Damit gebe ich nur eine Testdatei aus -- davor und danach.
Ed wird aufgerufen mit
Code: Alles auswählen
ed -s a <<EOF
`a' ist die Datei die editiert werden soll.
<<EOF startet ein Here-Dokument; dieses umfasst alle folgende Eingabe bis zum nächsten EOF.
Mit Here-Docs kann man Text in die Standardeingabe schreiben. Damit kann ed automatisiert werden.
Die ed-Befehle:
Code: Alles auswählen
/kernfs/,/data/c
Der Ersatztext folgt dem c-Kommando und wird mit dem nächsten alleinstehenden Punkt abgeschlossen. Da muss dein Ersatztext stehen.
Danach wird gesichert (write).
Dann beendet (quit).
Ed ist nicht allzu umfangreich. Schau dir seine Manpage an und spiele ein bisschen interaktiv an einer kleinen Datei rum, dann kommst du schnell dahinter wie du ihn bedienen musst. (Interaktiv heißt, dass du das Here-Doc weglässt und statt dessen die Befehle interaktiv eingibst.) Du kannst dir dazu auch den ersten Teil meines Softwareschätze-Vortrags anschauen, da erkläre ich ed Stück für Stück. http://ulm.ccc.de/ChaosSeminar/2009/10_Softwareschaetze
Use ed once in a while!
Re: Textblöcke mit AWK oder SED ersetzen.
Das ist aber etwas umständlich:Meillo hat geschrieben:Sind die Anfangs- und End-Marker eindeutig in der Datei? Also, gibt's die nur genau einmal?fiberkill hat geschrieben: In dieser Datei möchte ich einen Textblock, der einen definierten Anfang und Ende hat.
Nimm ed. Hier eine Beispielsession:Diesen Bock möchte ich mit einem anderen Textblock, der die gleichen Anfang- und Ende-Strings hat ersetzen.Code: Alles auswählen
$ cat a /dev/wd0a on / type ffs (local) kernfs on /kern type kernfs (local) serveme:/multimedia on /multimedia type nfs serveme:/data on /data type nfs serveme:/scratch on /scratch type nfs $ ed -s a <<EOF > /kernfs/,/data/c > foo > bar > . > w > q > EOF $ cat a /dev/wd0a on / type ffs (local) foo bar serveme:/scratch on /scratch type nfs $
Code: Alles auswählen
chrisbra t41:/tmp/sed [1147:4]% sed '/kernfs/,/data/c\
foo\
blah' mount.txt
/dev/wd0a on / type ffs (local)
foo
blah
serveme:/scratch on /scratch type nfs
Meine Whishlist
:wq!
:wq!