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 ?
Frage an die sed profis
ne Notloesung inside
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
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
Re: Frage an die sed profis
Ein einfaches w als letzten oder vorletzten Befehl sollte genügen, um die Datei zurückzuscghreiben.
Hans
Hans
Re: Frage an die sed profis
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-->
Das geht doch auch mit VIM: <font face="Courier New">vim -n -c "0,$s/Auto/Katz/g" -c ":wq" new.txt</font><!--fixed-->
Re: Frage an die sed profis
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
@ 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
Re: Frage an die sed profis
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).
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).
Re: Frage an die sed profis
@ 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
"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
Re: Frage an die sed profis
@ Rossi
:set compatible
und der vim verhält sich (ziemlich genau) wie der original vi.
:set compatible
und der vim verhält sich (ziemlich genau) wie der original vi.
Re: Frage an die sed profis
@ 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
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
Re: Frage an die sed profis
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.
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.