Dies ist eine alte Frage, aber ich möchte eine andere Version von dd hinzufügen Befehl, der besser für große Byte-Blöcke geeignet ist:
dd if=input.binary of=output.binary skip=$offset count=$bytes iflag=skip_bytes,count_bytes
wobei $offset und $bytes sind Zahlen in Byte-Einheiten.
Der Unterschied zur akzeptierten Antwort von Thomas besteht darin, dass bs=1 kommt hier nicht vor. bs=1 setzt die Ein- und Ausgabeblockgröße auf 1 Byte, was es furchtbar langsam macht, wenn die Anzahl der zu extrahierenden Bytes groß ist.
Das heißt wir belassen die Blockgröße (bs ) mit dem Standardwert von 512 Bytes. Mit iflag=skip_bytes,count_bytes , sagen wir dd um die Werte nach skip zu behandeln und count als Byte-Anzahl statt Block-Anzahl.
head -c + tail -c
Ich bin mir nicht sicher, wie es mit dd verglichen wird in Effizienz, aber es macht Spaß:
printf "123456789" | tail -c+2 | head -c3
wählt 3 Bytes aus, beginnend mit dem 2.:
234
Siehe auch:
- Wie man unter Unix/Linux einen beliebigen Chunk aus einer Datei holt
- Handbuch für Kopf
- Handbuch für Heck
Versuchen Sie es mit dd :
dd skip=102567 count=253 if=input.binary of=output.binary bs=1
Die Option bs=1 setzt die Blockgröße und macht dd lesen und schreiben Sie jeweils ein Byte. Die Standardblockgröße beträgt 512 Bytes.
Der Wert von bs wirkt sich auch auf das Verhalten von skip aus und count seit den Zahlen in skip und count sind die Anzahl der Blöcke dass dd überspringt bzw. liest/schreibt.