Esta es una pregunta antigua, pero me gustaría agregar otra versión del dd
comando que es más adecuado para grandes porciones de bytes:
dd if=input.binary of=output.binary skip=$offset count=$bytes iflag=skip_bytes,count_bytes
donde $offset
y $bytes
son números en unidades de bytes.
La diferencia con la respuesta aceptada de Thomas es que bs=1
no aparece aquí. bs=1
establece el tamaño del bloque de entrada y salida en 1 byte, lo que lo hace terriblemente lento cuando la cantidad de bytes para extraer es grande.
Esto significa que dejamos el tamaño del bloque (bs
) en su valor predeterminado de 512 bytes. Usando iflag=skip_bytes,count_bytes
, le decimos dd
para tratar los valores después de skip
y count
como cantidad de bytes en lugar de cantidad de bloque.
head -c
+ tail -c
No estoy seguro de cómo se compara con dd
en eficiencia, pero es divertido:
printf "123456789" | tail -c+2 | head -c3
elige 3 bytes, empezando por el 2º:
234
Véase también:
- Cómo obtener un fragmento arbitrario de un archivo en Unix/Linux
- Manual para la cabeza
- Manual de cola
Prueba dd
:
dd skip=102567 count=253 if=input.binary of=output.binary bs=1
La opción bs=1
establece el tamaño del bloque, haciendo dd
leer y escribir un byte a la vez. El tamaño de bloque predeterminado es de 512 bytes.
El valor de bs
también afecta el comportamiento de skip
y count
ya que los números en skip
y count
son los números de bloques que dd
saltará y leerá/escribirá, respectivamente.