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.