En un escritorio Linux (RHEL4), quiero extraer un rango de bytes (generalmente menos de 1000) desde un archivo grande (> 1 Gig). Conozco el desplazamiento en el archivo y el tamaño del fragmento.
Puedo escribir código para hacer esto, pero ¿hay una solución de línea de comando?
Idealmente, algo como:
magicprogram --offset 102567 --size 253 < input.binary > output.binary

status=nonepara suprimir la salida a stderr.dd if=in.bin bs=1 status=none skip=$((0x88)) count=$((0x80)) of=out.bin.Esta es una pregunta antigua, pero me gustaría agregar otra versión del
ddcomando que sea más adecuada para grandes cantidades de bytes:donde
$offsety$bytesson números en unidades de bytes.La diferencia con la respuesta aceptada de Thomas es que
bs=1no aparece aquí.bs=1produce que el tamaño del bloque de entrada y salida sea de 1 byte, lo que lo hace terriblemente lento cuando la cantidad de bytes a extraer es grande.fuente
iflages un operando desconocido y sin él obtienes un bloque completo.ddse puede utilizar comoiflagsoporte (brew install coreutils). Nota: por defecto, las utilidades se instalan con ungprefijo (por ejemplo, engddlugar dedd)head -c+tail -cNo estoy seguro de cómo se compara con la
ddeficiencia, pero es divertido:elige 3 bytes, comenzando en el segundo:
Véase también: https://stackoverflow.com/a/1272995/895245
fuente
printf '\x01\x02' > fyhd.El comando dd puede hacer todo esto. Observe los parámetros de búsqueda y / o omisión como parte de la llamada.
fuente
Aun más rápido
fuente
skipestá en unidades debs.req_offset=$(bc <<< "$offset/$bs")y asegurarse de que resulte un valor redondo.