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.