Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
-
Methusalix
Beitrag
von Methusalix » 07.03.2006 17:16:27
Hallo,
diese Frage orientiert sich an einem anderen Thread:
http://www.debianforum.de/forum/viewtopic.php?t=63682
Ich habe dabei aber eine erweiterte Fragestellung. Vorhanden ist die Datei a.
Wenn ich jetzt mit
ein Zeile lösche und die Ausgabe in die Ursprungsdatei umleite, bleibt eine leere Datei zurück. Offensichtlich kann sed nicht in eine Datei schreiben, aus der gelesen wird. Aber:
funktioniert mit der Umleitung in eine andere Datei und anschließendem umkopieren. Insofern ist das die Lösung. Meine Frage ist nun, ob es eine elegantere Lösung gibt, die einem Umleitung oder umkopieren erspart?
Gruß
Matthias
Zuletzt geändert von Methusalix am 08.03.2006 00:17:20, insgesamt 1-mal geändert.
-
Snoopy
- Beiträge: 4297
- Registriert: 17.11.2003 18:26:56
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Rh.- Pflz.
Beitrag
von Snoopy » 07.03.2006 17:31:00
Hi
AFAIK kann
sed nicht indieselbe Datei "herumeditieren".
Meiner Meinung nach muss man diesen Zwischenschritt gehen...
-
roli
- Beiträge: 3174
- Registriert: 10.09.2003 17:39:58
Beitrag
von roli » 07.03.2006 19:14:57
Hi Snoopy,
"und sie ist doch keine Scheibe", oder so aehnlich. Es geht doch. Ist zwar nicht auf meinem Mist gewachsen, aber unter der Ueberschrift "Ersetzen ohne Tempdateien" stand in der freeX 6/2005 auf Seite 94 folgendes:
Code: Alles auswählen
sed 's/^DEC 12/Aug 12/1' logfile | dd of=logfile conv=notrunc
Achtung: die Datei darf durch die Ersetzung auf keinen Fall größer werden, da sonst der schreibende dd-Befehl den lesenden sed-Befehl
ueberholt, und es somit zu einer Endlosschleife kommen kann.
Roland
"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"
-
Snoopy
- Beiträge: 4297
- Registriert: 17.11.2003 18:26:56
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Rh.- Pflz.
Beitrag
von Snoopy » 07.03.2006 19:17:36
roli hat geschrieben:"und sie ist doch keine Scheibe", oder so aehnlich.
Das ist wohl wahr *ggg
Es geht doch.[...]
Code: Alles auswählen
sed 's/^DEC 12/Aug 12/1' logfile | dd of=logfile conv=notrunc
Ah...aber man nimmt sich
dd zuhilfe...
sed alleine kann es nicht...das wollte ich eigentlich damit sagen.
Das ist wiederum eine Umleitung, mit Hilfenahme von einer Pipe
Aber es ist sicherlich hilfreich...für weitere Lösungsvorschläge
Ich habe mich eben hauptsächlich auf
Meine Frage ist nun, ob es eine elegantere Lösung gibt, die einem Umleitung oder umkopieren erspart?
bezogen.
-
meandtheshell
- Beiträge: 4054
- Registriert: 14.01.2005 17:51:30
Beitrag
von meandtheshell » 07.03.2006 19:36:36
@roli
du bist ja einer
@snoopy
hi du - sed kann das wohl "alleine" - nennt sich "in place" bearbeitung
Code: Alles auswählen
markusgattol@pc1:~/misc/test$ cat xfile
eins
zwei
drei
markusgattol@pc1:~/misc/test$ sed -i '/zwei/d' xfile;cat xfile
eins
drei
markusgattol@pc1:~/misc/test$
markus
-
Snoopy
- Beiträge: 4297
- Registriert: 17.11.2003 18:26:56
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Rh.- Pflz.
Beitrag
von Snoopy » 07.03.2006 19:46:05
Hi Markus
Hmm eh cool..das Teil kenn ich garnet.
Weisst Du zufällig ob das ein Linux-Derivat bzgl
sed ist ?
Unter AIX hab ich sowas vergeblich versucht...und hätte mir einige Zeilen Code ersparen können.
Wieder was gelernt...fein fein fein
-
meandtheshell
- Beiträge: 4054
- Registriert: 14.01.2005 17:51:30
Beitrag
von meandtheshell » 07.03.2006 19:50:25
hi snoopy
phuuu - keine Ahnung wie das auf AIX aussieht. AFAICT ist es aber gar nicht einmal eine GNU extension. Du musst aufpassen sed ist etwas tricky - je nachdem wie du gewisse Optionen verwendest haben sie versch. Bedeutung. Da hilft es nichts - man muß lesen lesen lesen ...
http://www.gnu.org/software/sed/
http://www.ptug.org/sed/sedfaq.htm
http://www.tty1.net/sed-tutorium/html/index.html
Den zweiten Link würde ich einmal überfliegen - da sind auch viele GNU extensions drinnen - echt super Sachen
z.B \L, \U usw.
Also ich kann nur sagen DebianGNU/* lernt man erst nach langer Zeit genau wegen solcher Kleinigkeiten immer mehr schätzen. Solaris und Co können mir gestohlen bleiben.
markus
-
roli
- Beiträge: 3174
- Registriert: 10.09.2003 17:39:58
Beitrag
von roli » 07.03.2006 20:11:35
Snoopy hat geschrieben:Ah...aber man nimmt sich
dd zuhilfe...
sed alleine kann es nicht...das wollte ich eigentlich damit sagen.
Das ist wiederum eine Umleitung, mit Hilfenahme von einer Pipe
Die Frage war ja nicht ob's sed alleine kan, sondern ob's ohne "Zwischendatei" geht
Snoopy hat geschrieben:Ich habe mich eben hauptsächlich auf
Meine Frage ist nun, ob es eine elegantere Lösung gibt, die einem Umleitung oder umkopieren erspart?
bezogen.
Ist's denn so unelegant? Jedenfalls funkioniert's mit den erwaehnten Einschraenkungen "ueberall" wahrscheinlich. Ob man immer die Option von der Markus schreibt hat ...
Wie auch immer, ich kannte diese Option auch noch nicht, und finde sie gut. Man kann hier doch sehr oft noch was dazulernen.
Roland
"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"
-
Methusalix
Beitrag
von Methusalix » 08.03.2006 00:16:12
Hallo,
@roli: Wie Snoopy schon geschrieben hat, ist da mit der pipe ja auch eine Umleitung drin.
Und wenn ich dann noch die Einschränkungen berücksichtige, setze ich da doch mehr auf
meine Lösung (s.o.).
Ich habe aber gerade den von Dir genannten freeX Artikel nachgelesen und weiß jetzt immerhin, warum die Ausgabe in die gleiche Datei nicht funktioniert.
@meandtheshell: echt cool. Ich habe gerade nicht schlecht gestaunt, als ich das nachgestellt habe. Ich werde mich gleich mal an die von Dir genannten links setzen.
Dank an alle.
Gruß
Matthias
-
Snoopy
- Beiträge: 4297
- Registriert: 17.11.2003 18:26:56
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Rh.- Pflz.
Beitrag
von Snoopy » 08.03.2006 06:09:54
Hi
Snoopy hat geschrieben:Weisst Du zufällig ob das ein Linux-Derivat bzgl sed ist ?
Unter AIX hab ich sowas vergeblich versucht
Shit...geht unter AIX 4.3.3 nicht.
Ist vielleicht eine neuerer Standard und evtl. in AIX 5L vorhanden...
i is not a valid flag.
Naja kein Wunder dass ich das net kannte...*seufz
Schade..aber naja man kann net Alles haben
Hauptsache Matthias-GE hat seine Lösung
-
roli
- Beiträge: 3174
- Registriert: 10.09.2003 17:39:58
Beitrag
von roli » 08.03.2006 11:26:50
Hi,
unter SunOS 5.8 hier bei mir auf'e Arbeit gibt's auch kein -i Parameter bei sed.
Roland
"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"