Questa è una vecchia domanda, ma vorrei aggiungere un'altra versione del dd
comando più adatto per grossi blocchi di byte:
dd if=input.binary of=output.binary skip=$offset count=$bytes iflag=skip_bytes,count_bytes
dove $offset
e $bytes
sono numeri in unità di byte.
La differenza con la risposta accettata di Thomas è che bs=1
qui non compare. bs=1
imposta la dimensione del blocco di input e output su 1 byte, il che lo rende terribilmente lento quando il numero di byte da estrarre è elevato.
Ciò significa che lasciamo la dimensione del blocco (bs
) al valore predefinito di 512 byte. Usando iflag=skip_bytes,count_bytes
, diciamo dd
per trattare i valori dopo skip
e count
come quantità di byte invece che di quantità di blocchi.
head -c
+ tail -c
Non sono sicuro di come si confronti con dd
in termini di efficienza, ma è divertente:
printf "123456789" | tail -c+2 | head -c3
seleziona 3 byte, partendo dal secondo:
234
Vedi anche:
- Come prendere un blocco arbitrario da un file su Unix/Linux
- Manuale per la testa
- Manuale per la coda
Prova dd
:
dd skip=102567 count=253 if=input.binary of=output.binary bs=1
L'opzione bs=1
imposta la dimensione del blocco, rendendo dd
leggere e scrivere un byte alla volta. La dimensione predefinita del blocco è di 512 byte.
Il valore di bs
influisce anche sul comportamento di skip
e count
dai numeri in skip
e count
sono i numeri di blocchi quel dd
salterà e leggerà/scriverà, rispettivamente.