Estaba intentando hacer una sustitución sed
en un archivo binario, pero estoy empezando a creer que no es posible. Esencialmente lo que quería hacer era similar a la siguiente:reemplazo de sed binario
sed -bi "s/\(\xFF\xD8[[:xdigit:]]\{1,\}\xFF\xD9\)/\1/" file.jpg
La lógica me gustaría conseguir es: escanear a través de un archivo binario hasta que el código hexadecimal FFD8
, continuar leyendo hasta FFD9
, y sólo a salvar lo que había entre ellos (descarta la basura antes y después, pero incluye FFD8
y FFD9
como la parte guardada del archivo)
¿Hay una buena manera de hacerlo? Incluso si no está usando sed
?
EDIT: Solo estaba jugando y encontré la manera más limpia de hacerlo, IMO. Soy consciente de que esta declaración grep actuará codicioso.
hexdump -ve '1/1 "%.2x"' dirty.jpg | grep -o "ffd8.*ffd9" | xxd -r -p > clean.jpg
Siempre tenga cuidado con las coincidencias falsas al agrupar patrones en lo que esencialmente son datos aleatorios, como una secuencia binaria comprimida. – dwarring
@snoopy - (1) ¿hay una mejor solución? (2) si no, ¿qué se necesita hacer para mejorar esto? ¿Detener la búsqueda una vez que se llega al "final de los metadatos"? – DVK
Depende exactamente de lo que esté haciendo pero el módulo CPAN Imagen :: EXIF le permite extraer y cambiar metadatos. Podría ser de utilidad aquí. – dwarring