[gelöst] mit sed Datei verändern und speichern

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

[gelöst] mit sed Datei verändern und speichern

Beitrag von Duff » 24.01.2008 10:26:12

Hallo,

habe mal wieder eine Frage zum Werkzeug sed.

Und zwar möchte ich in einem Schritt eine Datei bearbeiten und verändern!

Bisher mache ein

Code: Alles auswählen

sed -e 's/^\(.*\)$/\1.gz/g' datei.txt
Ich möchte aber, dass die Datei datei.txt geändert bleibt ohne die Ausgabe noch in eine extra Datei umlenken zu müssen.
Habe mir dazu zwar auch schon mal die Option r von sed angesehen, aber in Kombination bekomme ich es irgendwie nicht hin.

Danke.
Zuletzt geändert von Duff am 24.01.2008 13:51:32, insgesamt 1-mal geändert.
Oh, yeah!

Benutzeravatar
Savar
Beiträge: 7174
Registriert: 30.07.2004 09:28:58
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Berlin

Beitrag von Savar » 24.01.2008 10:30:43

Der nicht dokumentierte Schalter "-i" ist das was du suchst..
MODVOICE/MYVOICE
Debianforum Verhaltensregeln
Log Dateien? -> NoPaste

Benutzeravatar
Savar
Beiträge: 7174
Registriert: 30.07.2004 09:28:58
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Berlin

Beitrag von Savar » 24.01.2008 10:31:34

Savar hat geschrieben:Der nicht dokumentierte Schalter "-i" ist das was du suchst..
Ist aber nicht Standard.. heißt, auf einem Solaris Server gibts den Schalter wahrscheinlich nicht... da musst du per Umlenkung das machen..
MODVOICE/MYVOICE
Debianforum Verhaltensregeln
Log Dateien? -> NoPaste

comes
Beiträge: 2702
Registriert: 11.03.2005 07:33:30
Wohnort: /dev/null
Kontaktdaten:

Beitrag von comes » 24.01.2008 10:32:57

Savar hat geschrieben:Der nicht dokumentierte Schalter "-i" ist das was du suchst..
wenn er undokumentiert ist, wie erfährt man dann, außer quellcode studie davon?
grüße, comes

Faschismus ist keine Meinung, sondern ein Verbrechen!
http://sourcewars.de

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Beitrag von Duff » 24.01.2008 10:35:57

Nee, es handelt sich um ein HP-UX. Habe diesen Schalter schon gefunden und auch in meinem schlauen awk&sed Buch geblättert, doch leider bekomme ich es nicht wirklich hin.
Oh, yeah!

Benutzeravatar
Savar
Beiträge: 7174
Registriert: 30.07.2004 09:28:58
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Berlin

Beitrag von Savar » 24.01.2008 10:43:09

Duff hat geschrieben:Nee, es handelt sich um ein HP-UX. Habe diesen Schalter schon gefunden und auch in meinem schlauen awk&sed Buch geblättert, doch leider bekomme ich es nicht wirklich hin.
Ich nehme an, dass HP-UX den Schalter auch nicht kenn :( sorry..


@comes: durch einen Vortrag habe ich es erfahren.. und ich meine, weißt du das bei glxgears "-printfps" angegeben werden muss um die FPS zu sehen? (es gibt auch noch einen miesen ewig langen Namen aber egal..)
Grundsätzlich wird er denke ich deshalb nicht erwähnt, da er nicht standardkonform ist und damit Skripte nicht mehr distri-unabhängig sind..
MODVOICE/MYVOICE
Debianforum Verhaltensregeln
Log Dateien? -> NoPaste

roli
Beiträge: 3174
Registriert: 10.09.2003 17:39:58

Beitrag von roli » 24.01.2008 10:44:28

Hi Daniel,

ich haette auch eine Loesung, die ich irgendwann mal irgendwo gefunden habe, ist also nicht auf meinem Mist gewachsen, kommt aber heute exclusiv fuer dich aus meinem Fundus ;-}

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 „überholt“, 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"

comes
Beiträge: 2702
Registriert: 11.03.2005 07:33:30
Wohnort: /dev/null
Kontaktdaten:

Beitrag von comes » 24.01.2008 10:48:19

Savar hat geschrieben: @comes: durch einen Vortrag habe ich es erfahren.. und ich meine, weißt du das bei glxgears "-printfps" angegeben werden muss um die FPS zu sehen? (es gibt auch noch einen miesen ewig langen Namen aber egal..)
Grundsätzlich wird er denke ich deshalb nicht erwähnt, da er nicht standardkonform ist und damit Skripte nicht mehr distri-unabhängig sind..
möglich, aber wir schweifen ins private ab...

btw: glxgears zeigt bei mir auf der konsole die FPS an... ohne parameter...
grüße, comes

Faschismus ist keine Meinung, sondern ein Verbrechen!
http://sourcewars.de

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Beitrag von Duff » 24.01.2008 11:25:05

roli hat geschrieben:Hi Daniel,

ich haette auch eine Loesung, die ich irgendwann mal irgendwo gefunden habe, ist also nicht auf meinem Mist gewachsen, kommt aber heute exclusiv fuer dich aus meinem Fundus ;-}

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 „überholt“, und es somit zu einer Endlosschleife kommen kann.
Danke für das Beispiel Roland, aber ich würde es gerne über die Option -i machen.
Unter HP-UX gibt es aber auch die -i Option. Kann es aber auch unter debian testen.
Oh, yeah!

comes
Beiträge: 2702
Registriert: 11.03.2005 07:33:30
Wohnort: /dev/null
Kontaktdaten:

Beitrag von comes » 24.01.2008 11:30:23

erm... nur mal ne frage....

warum machst du dir nciht ein script?

Code: Alles auswählen

#!/bin/bash
# Karlotto.sh $1
TEMP_FILE=/tmp/karlotto
touch $TEMP_FILE
sed <commands> $1 >> $TEMP_FILE
rm -rf $1
cp $TEMP_FILE $1
exit 0

Code: Alles auswählen

alias sed=Karlotto.sh

Code: Alles auswählen

sed file
grüße, comes

Faschismus ist keine Meinung, sondern ein Verbrechen!
http://sourcewars.de

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Beitrag von Duff » 24.01.2008 11:38:05

Weil ich mal gerne wissen möchte, wie man es in nur einer Zeile mit sed realisieren kann.

...dann kann ich sowas nämlich auch in Zukunft mal nutzen...
Oh, yeah!

Benutzeravatar
Meillo
Moderator
Beiträge: 9254
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Beitrag von Meillo » 24.01.2008 12:52:17

Duff hat geschrieben:Weil ich mal gerne wissen möchte, wie man es in nur einer Zeile mit sed realisieren kann.

Code: Alles auswählen

sed 'irgendwas' file > file_new && mv file_new file
ist der zu bevorzugende Weg.
Use ed once in a while!

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Beitrag von Duff » 24.01.2008 13:20:34

Meillo hat geschrieben:
Duff hat geschrieben:Weil ich mal gerne wissen möchte, wie man es in nur einer Zeile mit sed realisieren kann.

Code: Alles auswählen

sed 'irgendwas' file > file_new && mv file_new file
ist der zu bevorzugende Weg.
Das ist mir schon klar, aber wie schon oben erwähnt, würde ich es gerne über die Optionen von sed machen (-i Option).
Nur wie? :?:
Oh, yeah!

Benutzeravatar
Meillo
Moderator
Beiträge: 9254
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Beitrag von Meillo » 24.01.2008 13:23:34

Duff hat geschrieben:würde ich es gerne über die Optionen von sed machen (-i Option).
Nur wie? :?:

Code: Alles auswählen

sed -i -e 's/aa/bb/' file
... würde ich sagen.

Vermutlich wird die Ausgabe des sed-Aufrufs einfach in die Quelldatei geschrieben.
Use ed once in a while!

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Beitrag von Duff » 24.01.2008 13:51:12

Meillo hat geschrieben:
Duff hat geschrieben:würde ich es gerne über die Optionen von sed machen (-i Option).
Nur wie? :?:

Code: Alles auswählen

sed -i -e 's/aa/bb/' file
... würde ich sagen.

Vermutlich wird die Ausgabe des sed-Aufrufs einfach in die Quelldatei geschrieben.
Danke, wunderbar!!!

So einfach kann es sein, wenn man weiß wie und nicht total verkehrt gedacht hat.
Oh, yeah!

Benutzeravatar
Savar
Beiträge: 7174
Registriert: 30.07.2004 09:28:58
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Berlin

Beitrag von Savar » 24.01.2008 14:15:31

ups sorry.. dachte das wäre klar...
MODVOICE/MYVOICE
Debianforum Verhaltensregeln
Log Dateien? -> NoPaste

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Beitrag von Duff » 24.01.2008 14:24:34

Savar hat geschrieben:ups sorry.. dachte das wäre klar...
nein, leider nicht....
Oh, yeah!

Antworten