Solución:
Esto parece funcionar para mí:
LANG=C grep --only-matching --byte-offset --binary --text --perl-regexp "<x-hex pattern>" <file>
forma corta:
LANG=C grep -obUaP "<x-hex pattern>" <file>
Ejemplo:
LANG=C grep -obUaP "x01x02" /bin/grep
Salida (cygwin binary):
153: <x01x02>
33210: <x01x02>
53453: <x01x02>
Por lo tanto, puede volver a hacer grep para extraer compensaciones. Pero no olvide volver a utilizar el modo binario.
Nota: LANG=C
es necesario para evitar problemas de codificación utf8.
También hay una herramienta bastante útil llamada binwalk, escrita en Python, que proporciona la coincidencia de patrones binarios (y mucho más además). Así es como buscaría una cadena binaria, que genera el desplazamiento en decimal y hexadecimal (de los documentos):
$ binwalk -R "x00x01x02x03x04" firmware.bin
DECIMAL HEX DESCRIPTION
--------------------------------------------------------------------------
377654 0x5C336 Raw string signature
Probamos varias cosas antes de llegar a una solución aceptable:
xxd -u /usr/bin/xxd | grep 'DF'
00017b0: 4010 8D05 0DFF FF0A 0300 53E3 0610 A003 @.........S.....
root# grep -ibH "df" /usr/bin/xxd
Binary file /usr/bin/xxd matches
xxd -u /usr/bin/xxd | grep -H 'DF'
(standard input):00017b0: 4010 8D05 0DFF FF0A 0300 53E3 0610 A003 @.........S.....
Luego descubrió que podíamos obtener resultados utilizables con
xxd -u /usr/bin/xxd > /tmp/xxd.hex ; grep -H 'DF' /tmp/xxd
Tenga en cuenta que el uso de un objetivo de búsqueda simple como ‘DF’ coincidirá incorrectamente con los caracteres que se extienden a través de los límites de bytes, es decir
xxd -u /usr/bin/xxd | grep 'DF'
00017b0: 4010 8D05 0DFF FF0A 0300 53E3 0610 A003 @.........S.....
--------------------^^
Entonces usamos una expresión regular ORed para buscar ‘DF’ O ‘DF’ (el searchTarget precedido o seguido por un carácter de espacio).
El resultado final parece ser
xxd -u -ps -c 10000000000 DumpFile > DumpFile.hex
egrep ' DF|DF ' Dumpfile.hex
0001020: 0089 0424 8D95 D8F5 FFFF 89F0 E8DF F6FF ...$............
-----------------------------------------^^
0001220: 0C24 E871 0B00 0083 F8FF 89C3 0F84 DF03 .$.q............
--------------------------------------------^^