Ersetzen aller Vorkommen ab einer bestimmten Position mit einem Shell script
Hallo zusammen,
Ich versuche schon seit kurzer Zeit einige nützliche Shellscripte auf meinem iPad über MobileTerminal zu programmieren. Ich habe bis jetzt auch schon vieles geschafft. Kürzlich habe ich ein Programm programmiert, dass alle bestimmten Vorkommen einer Datei in andere Ersetzen kann. Dieses würde ich jetzt gerne für aufgezeichnete Daten (1 Byte pro Datensatz) benutzen. Ich will z.B. alle 02 in 48 umwandeln. Mein Problem dabei ist, dass die Datei jetzt aber am Anfang 2000 Bytes Infodaten wie z.B. Ort enthält, die nicht ersetzt werden dürfen. Das heisst, dass erst ab dem 2000 Byte ersetzt werden darf. Eine zusätzliche Schwierigkeiten ist auch noch, dass es keine Zeilen gibt. Ich würde übrigens eine Such- und Ersetz Angäbe in Hexadezimal Bevorzugen aber es ist mir nicht so wichtig, da ich die Zahlensysteme einfach mit meinem Taschenrechner umrechnen kann.
Ich habe das gleiche Programm schon einmal am Computer in Blitzbasic Programmiert:
Die Datei ist übrigens etwa so aufgebaut:
Infodaten (2000 Bytes)
)(&H*°§¬|¢¬|8§ v543^'^'éèSA=W@#°§¬|¢5QEàQ...
Eigentliche Daten (ca. 22 MB)
¦@#§¬°|¢§°#6fd+"*ç%*°§¬|¢¬|8§ v543^'^'éèSA@#°§¬|¢5QEàQ ...
Natürlich sind Die Messdaten nicht solche ASCI Zeichen es wird beim öffnen halt nur so dargestellt deswegen bevorzuge ich eben auch eine Hexadezimaleingabe!
Ich hoffe ihr könnt mir helfen. Wichtig ist hier vielleicht aber noch zu sagen, dass ich noch ziemlicher Anfänger in Shell bin sonst aber ziemlich gut Programmieren kann. Auch ist mein iPad natürlich Jailbrocken. Sonst hätte ich ja MobileTerminal nicht installieren können.
Ich versuche schon seit kurzer Zeit einige nützliche Shellscripte auf meinem iPad über MobileTerminal zu programmieren. Ich habe bis jetzt auch schon vieles geschafft. Kürzlich habe ich ein Programm programmiert, dass alle bestimmten Vorkommen einer Datei in andere Ersetzen kann. Dieses würde ich jetzt gerne für aufgezeichnete Daten (1 Byte pro Datensatz) benutzen. Ich will z.B. alle 02 in 48 umwandeln. Mein Problem dabei ist, dass die Datei jetzt aber am Anfang 2000 Bytes Infodaten wie z.B. Ort enthält, die nicht ersetzt werden dürfen. Das heisst, dass erst ab dem 2000 Byte ersetzt werden darf. Eine zusätzliche Schwierigkeiten ist auch noch, dass es keine Zeilen gibt. Ich würde übrigens eine Such- und Ersetz Angäbe in Hexadezimal Bevorzugen aber es ist mir nicht so wichtig, da ich die Zahlensysteme einfach mit meinem Taschenrechner umrechnen kann.
Ich habe das gleiche Programm schon einmal am Computer in Blitzbasic Programmiert:
Dim Block(25000000)
;Einlesen und verändern der Datei
filein = ReadFile("Test.dat")
i=0
i_max=FileSize("Test.dat")
While Not i=i_max
Block(i) = ReadByte(filein)
If i>2000 And Block(i)=18 Then Block(i)=46
i=i+1
Wend
CloseFile filein
;Änderungen Spiechern
filein = WriteFile("Test.dat")
For i=0 To i_max
WriteByte filein,Block(i)
Next
CloseFile filein
Print "Fertig!"
Input()
End
Die Datei ist übrigens etwa so aufgebaut:
Infodaten (2000 Bytes)
)(&H*°§¬|¢¬|8§ v543^'^'éèSA=W@#°§¬|¢5QEàQ...
Eigentliche Daten (ca. 22 MB)
¦@#§¬°|¢§°#6fd+"*ç%*°§¬|¢¬|8§ v543^'^'éèSA@#°§¬|¢5QEàQ ...
Natürlich sind Die Messdaten nicht solche ASCI Zeichen es wird beim öffnen halt nur so dargestellt deswegen bevorzuge ich eben auch eine Hexadezimaleingabe!
Ich hoffe ihr könnt mir helfen. Wichtig ist hier vielleicht aber noch zu sagen, dass ich noch ziemlicher Anfänger in Shell bin sonst aber ziemlich gut Programmieren kann. Auch ist mein iPad natürlich Jailbrocken. Sonst hätte ich ja MobileTerminal nicht installieren können.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 203860
Url: https://administrator.de/forum/ersetzen-aller-vorkommen-ab-einer-bestimmten-position-mit-einem-shell-script-203860.html
Ausgedruckt am: 28.04.2025 um 14:04 Uhr
7 Kommentare
Neuester Kommentar
Moin,
Als allererstes solltest Du Dir die Formattierungsmöglichkeiten eines Beitrages anschauen. Zumindest den Code solltest Du korrekt formattieren, damit man den auch lesen kann.
Ansonsten:
lks
Als allererstes solltest Du Dir die Formattierungsmöglichkeiten eines Beitrages anschauen. Zumindest den Code solltest Du korrekt formattieren, damit man den auch lesen kann.
Ansonsten:
- Den eigenen iPad zu rooten ist nicht illegal. Nur das Umgehen von korrekter Lizensierung ist illegal.
- Wenn Du schon Deinen iPad gerootet hast, installier Dir doch einfach die Gnu-Utils wie bash & Co. und benutze das Kommandozeilentool tr zum Ersetzen der Zeichen. Warum das Rad immer neu erfinden?
lks
z.B. so:
lks
PS: Einrückungen erlauben es, den Code übersichtlicher zu gestalten. Sollte man als guter Programmierer wissen.
PPS: mit sed würde es genauso funktionieren. Allerdings ist sed nicht für Binärdaten ausgelegt.
Edit:
Fehlerhafte Zeile
korrigiert.
dd if=infile of=outfile bs=2000 count=1
dd if=infile bs=2000 skip=1 | tr "\x02" "\x48" >>outfile
lks
PS: Einrückungen erlauben es, den Code übersichtlicher zu gestalten. Sollte man als guter Programmierer wissen.
PPS: mit sed würde es genauso funktionieren. Allerdings ist sed nicht für Binärdaten ausgelegt.
Edit:
Fehlerhafte Zeile
dd if=infile bs=2000 seek=1 | tr "\x02" "\x48" >>outfile
korrigiert.