Frage an die sed profis

Post Reply
Message
Author
Rossi

Frage an die sed profis

#1 Post by Rossi »

Hallo,

ich versuche gerade ein wenig, sed zu verstehen. Das problem ist, das sed mir zwar die gesuchten Strings ersetzt, allerdings auf stdout ausgibt.
Ich würde gerne haben, das er die Änderungen in der Datei vornimmt, aber ich kann logischerweise nicht in die offene Datei umleiten. In eine andere Datei umleiten und diese dann umbenennen ist a) umständlich und unelegant und b) haut nicht hin, da dort dann nur die von sed "gefundenen" Zeilen enthalten sind und nicht der gesammte Text.

Jemand eine Idee ?

PB

ne Notloesung inside

#2 Post by PB »

Du koenntest das Problem - bis vielleicht
ne bessere Loesung kommt - erstmal so loesen:

perl -pi -e 's/Auto/Katze/g' Datei.txt

Der Befehl ersetzt in der Datei "Datei.txt"
alle Woerter in denen "Auto" vorkommt, mit
"Katze".

Dieser Befehl funktioniert auch mit mehreren
Dateien, z.B. wenn Du 140 Texte hast, in
denen Du Auto durch Katze ersetzen muesstest.

perl -pi -e 's/Auto/Katz/g' *.txt

Tschoe
Fritz

tenbaset
Posts: 31
Joined: 16. Mar 2001 18:34

Re: Frage an die sed profis

#3 Post by tenbaset »

Ein einfaches w als letzten oder vorletzten Befehl sollte genügen, um die Datei zurückzuscghreiben.

Hans

Descartes

Re: Frage an die sed profis

#4 Post by Descartes »

Wer braucht den für ein simples Suchen+Ersetzen Perl ?
Das geht doch auch mit VIM: <font face="Courier New">vim -n -c "0,$s/Auto/Katz/g" -c ":wq" new.txt</font><!--fixed-->

Jochen

Re: Frage an die sed profis

#5 Post by Jochen »

Tja, der Name "sed" stammt nun mal von "stream editor" und bezieht sich darauf, dass er wie ein typischer Filter arbeitet: Lesen von stdin, schreiben nach stdout. Ich denke, Dir bleibt wenig übrig, ausser Deiner eigenen Lösung mit umbenennen oder perl nehmen, wie Fritz vorgeschlagen hat.

@ Hans: ??? w schreibt nur den gerade vorliegenden pattern space in eine neue Datei. Ich denke, es ist nicht praktikabel, bei einer Datei mit ggf. 10000 Zeilen alle im hold space zu merken, um sie später unter altem Namen abzuspeichern.

Jochen

Rossi

Re: Frage an die sed profis

#6 Post by Rossi »

Vielen Dank erstmal.

Noch ne Frage an Descartes, sollte er das lesen:

Weißt Du, ob das auch mit vanilla vi geht ? (bzw. werds zu Hause mal ausprobieren). Weil, den finde ich überall (wie perl wahrscheinlich auch).

hendrik
Posts: 165
Joined: 16. Aug 1999 13:06
Contact:

Re: Frage an die sed profis

#7 Post by hendrik »

@ Rossi,
"vim ist Vi - iMproved"
die befehle sind die gleichen.
Rufe einfach mal vim ohne Parameter auf, schau Dir die Meldung an, mache dann das gleich mit vi<img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle">
hendrik

Sebastian Ude

Re: Frage an die sed profis

#8 Post by Sebastian Ude »

@ Rossi

:set compatible

und der vim verhält sich (ziemlich genau) wie der original vi.

Jochen

Re: Frage an die sed profis

#9 Post by Jochen »

@ Sebastian, Hendik:

Stimmt schon, was der vi kann, kann der vim schon lange, aber halt auch noch mehr. Ich bin mir jetzt nicht sicher, ob ein vanilla vi auch die Option "-c" kennt. Werd's Montag mal checken...

@ Rossi:

Den vi findest Du überall, das ist soweit korrekt. perl ist mittlerweile weit verbreitet, aber noch nicht selbstverständlich wie sed oder awk.

Jochen

Descartes

Re: Frage an die sed profis

#10 Post by Descartes »

Zumindest der vanilla vi von HP/UX kennt das Argument -c

statt
<font face="Courier New">vim -n -c "0,$s/Auto/Katz/g" -c ":wq" new.txt</font><!--fixed-->

lautet es mit HP/UX vanilla vi:
<font face="Courier New">vi -c "0,$s/Auto/Katz/g" -c ":wq" new.txt</font><!--fixed-->

Es wird allerdings nur das letzte -c "..." bearbeitet !
Das Argument -c "0,$s/Auto/Katz/g" wird nicht abgearbeitet; sondern nur das -c ":wq" !
Desweiteren muss beim Aufruf -c "0,$s/bla/blub/g" ein Leerzeichen zwischen 0,$ und dem ersetzen Befehl.

Also <font face="Courier New">vi -c "0,$ s/Auto/Katz/g" -c ":wq" new.txt</font><!--fixed--> wobei natürlich der Fehler mit dem "nur letzten -c Befehl ausführen" zum Tragen kommt.
Was aber geht ist <font face="Courier New">vi -c "0,$ s/Auto/Katz/g" new.txt</font><!--fixed--> -- ist aber halt nicht geeignet für automatisierte Scriptaufgaben.

Post Reply