nicobosshard
Goto Top

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:

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.

Content-Key: 203860

Url: https://administrator.de/contentid/203860

Printed on: May 5, 2024 at 11:05 o'clock

Member: Lochkartenstanzer
Lochkartenstanzer Mar 23, 2013, updated at Mar 25, 2013 at 08:16:41 (UTC)
Goto Top
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:

  • 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
Member: NicoBosshard
NicoBosshard Mar 24, 2013 at 09:52:55 (UTC)
Goto Top
Ich habe mal meinen Frage ein wenig Formatiert.

Leider habe ich tr nicht im Cydia App Store gefunden. Muss ich villeicht zuerst eine entsprechende Quelle adden?

Ich werde mal aber mein erstes Ersetzprogramm posten:

sed -i 's/OCIN/NICO/g' NAME.txt  

Geht eigentlich alles gut nur eben kann ich beim Befehl sed nirgens einen Startparameter angeben.

Auch bin ich froh zu wissen, dass Jailbreack doch nicht so Ilegal, wie zuerst vermutet, ist.
Member: NicoBosshard
NicoBosshard Mar 24, 2013 updated at 11:11:38 (UTC)
Goto Top
Habe mitlerweile herausgefunden, dass ich ja gar nichts installieren muss und der Befehl tr schon die ganze Zeit vorhanden war. Nur habe ich immer noch keine Ahnung wie ich eine Startposition angeben kann!
Member: Lochkartenstanzer
Lochkartenstanzer Mar 24, 2013, updated at Mar 25, 2013 at 08:17:53 (UTC)
Goto Top
z.B. so:

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. face-smile

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.
Member: NicoBosshard
NicoBosshard Mar 24, 2013 at 21:15:52 (UTC)
Goto Top
Vielen Dank Lochkartenstanzer es sieht schon gut aus. Leider gibt es noch folgenden Fehler: "dd 'standard output': cannot seek: Illegal seek". In der Ausgabedatei ist danach aber wenigstens schon die ersten 2000 Bytes zu sehen. Wenn ich seek weglasse wird übrigens alles ersetzt.

Ob die Datei danach beschädigt ist konnte ich leider nicht mehr testen, da mein ganzes iPad ist komplett abgestürzt ist (nur noch Apfel und Ladebalken wie bei einem Update). Der Absturz Grund ist mir noch unbekannt, ich bin aber fast 100% sicher, dass er nicht durch dieses Programm verursacht wurde.

Glücklicherweise habe ich meine SHSH Kays gesichert, dank denen ich es wider auf der Version iOS 6.1.2 Wiederherstellen und von neuem Jailbreacken. Leider wird das einige Tage dauern. Bis dahin bin ich natürlich weiter froh um alle Antworten, die mir helfen dieser seek Fehler noch zu verbessern.
Member: Lochkartenstanzer
Lochkartenstanzer Mar 24, 2013 at 21:25:46 (UTC)
Goto Top
Sorry, sollte skip statt seek heißen. Freudscher Vertipper. Aber ein kurzes man dd hätte es zutage gefördert.

lks
Member: NicoBosshard
NicoBosshard Mar 24, 2013 at 21:30:39 (UTC)
Goto Top
Herzlichen Danke, ich werde es testen sobald mein iPad wieder läuft.