¿Hay alguna manera de detectar bytes nulos (␀, NUL, \ 0) en sed?


15

En relación con otra pregunta , para detectar de forma difusa archivos binarios, ¿hay alguna forma de detectar ␀ bytes sed?


En GNU sed, sí, pero tenga en cuenta que en muchas unidades, las utilidades de texto no son capaces de manejar bytes nulos.
Gilles 'SO- deja de ser malvado'

Respuestas:


17

Ejemplo:

Demuestre que estoy enviando un byte NUL, seguido de una nueva línea:

$ echo -e \\0 | hexdump -C
00000000  00 0a                                             |..|
00000002

Ahora cambio el byte NUL a un !signo de exclamación:

$ echo -e \\0 | sed 's/\x00/!/' | hexdump -C
00000000  21 0a                                             |!.|

Entonces el truco es usar \x00como NUL-byte


3
Puede echo -ne \\0evitar una nueva línea.
l0b0

Reemplace hexdump -Ccon uniname -bcepupara ver qué carácter volca.
l0b0

66
Cabe mencionar que \xes una sedextensión no estándar , pero GNU lased proporciona.
jw013

66
También debe mencionarse, eso echo -ees un bashismo . printfEs mucho más compatible.
jofel

7

Sí, el patrón \x00coincide con el byte nulo.

Ejemplo:

$ printf "\0\n\0\n" > file
$ sed -e 's/\x00/test/' -i file
$ cat file
test
test
$  

@ l0b0: La razón por la que funcionó para mí fue que usé zsh. Según POSIX , reemplaza \0por el byte cero. Este reemplazo no es necesario ("se admitirá"), y en realidad bash no lo admite directamente. Para ello, necesitas usar echo -e. Reemplazo echocon printfen mi respuesta, que parece ser más compatible ...
jofel
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.