Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : hex Wert verändern (sed/awk)



linuxandi
30-12-2004, 09:28
Hallo,

ich möchte in mehreren Dateien den hexwert 0A nach 0D0A verändern. Dieser Wert kommt ungefähr 100-mal pro Datei vor.
Ich hatte ausprobiert:

sed 's/\0x0A/\0x0D0A/g' datei.orig > datei.neu

Damit bin ich aber nicht weiter gekommen.

Gruss
Andreas

peschmae
30-12-2004, 11:37
Wieso die \? Hast du mal eine Beispiel-Input-Datei bzw. steht 0x0A als Text dort oder wie?

MfG Peschmä

Hans-Georg Normann
30-12-2004, 16:12
Hi Linuxandi

warum nimmst du nicht dos2unix und unix2dos?

Hans

maceis
30-12-2004, 17:04
Wenn Du das ohnehin für jede Datei einzeln machen möchtest/kannst, kannst Du dazu auch sehr gut den vim benutzen.
1. Datei öffnen
2. mit ":" in den Last-Line-Modus wechseln.
3. "%s/0x0A/0x0D0A/g" und enter eingeben.
4 ":wq" und enter eingeben
5 nächte Datei öffnen
6. mit ":" und zweimal Pfeil nach oben Taste in der Kommandhistory den "%s..." Befehl erneut aufrufen
7. ":wq"
... und so weiter

Wenn sowas öfter vorkommt, würde ich mir in perl oder als Shellskript was überlegen.

HTH

Hans-Georg Normann
30-12-2004, 17:37
4 ":wq" und enter eingeben
5 nächte Datei öffnen
6. mit ":" und zweimal Pfeil nach oben Taste in der Kommandhistory den "%s..." Befehl erneut aufrufen
7. ":wq"
... und so weiterNicht doch! vi *.txt geht auch. Dann nimmt man statt :wq :w<Enter>:n

Mit awk kann man das auch wunderbar machen. Datei Zeile für Zeile mit getline einlesen und dann mit printf("%s\r\n", $0) >neuerDateiName.txt in die neue Datei schreiben.

Hans

maceis
31-12-2004, 14:09
Nicht doch! vi *.txt geht auch. Dann nimmt man statt :wq :w<Enter>:n
...
Ja stimmt; allerdings nur dann, wenn alle Dateien die Endung .txt haben und im selben Verzeichnis liegen.
Davon wollte ich allerdings nicht ausgehen.

Folgendes geht auch
vi +%s/0x0A/0x0D0A/g datei1 datei2 datei3 [...]
Dann alle geöffneten Dateien speichern (:wn (geht noch schneller als :w<Enter>:n)) und vi schließen (:q).

Wie so oft im Leben führen viele Wege nach Rom ;)

Hans-Georg Normann
31-12-2004, 14:52
Nö, stimmt so auch nicht. Die dürfen schon in unterschiedlichen Verzeichnissen Liegen. Angenommen, du hast die Dateinamen inclusive Pfad alle in einer Datei (files.txt) dann sieht das so aus:
vi $(cat fdiles.txt)Es gibt da bestimmt nochj eine Menge anderer Möglichkeiten.

Ich setze vorraus, dass keine Leerzeichen im Dateinamen vorhanden sind. Und auch bei meinem Vorschlag vi *.txt sollte dieses nur an das Problem heranführen. Im Allgemeinen glaube ich kann angenommen werden, dass man weiß, wie Dateien zu öffnen und Metazeichen einzusetzen sind. Nur wenn ich den Einduck habe, da ist noch gar kein Wissen, dann gehe ich darauf ein.

Hans

linuxandi
02-01-2005, 17:09
Ich wollte das jetzt mit dem vi machen und habe mir folgendes überlegt:

diese Änderungen der Dateien müssen in eine Skript realisiert werden, die Anzahl der Dateien ist variable.

ich habe mir gedacht:

vim *.orig -s ..\script

die Datei script enthält folgende Befehle:
:set fileformat=dos
:wn
:q!

Der Inhalt der ersten DAtei wirde korrigiert, jedoch nicht der Inhalt der folgenden Dateien. Hat da jemand noch ne Idee??

Gruss
Andreas