Expediente:
O000000667520994000000074720121112000000N^@^@^@
Usé el siguiente comando pero no funciona.
grep "^@^@^@" *
Puede grep para cualquier carácter, incluidos los caracteres de control / no imprimibles en el modo perl-regexp (-P) por su código hexadecimal:
grep -Pa '\x00' ...
-a
opción, de lo contrariogrep
cree que son datos binarios y no mostrará las líneas coincidentes.grep -Pv '\x00' file
no funciona en Cygwin ...^@
No es un quilate^
y un signo@
, es un personaje. Así es como algunos programas muestran el carácter NUL: valor ASCII 0, también conocido como\0
en C.Aquí he creado un archivo con un byte NUL. † Observe que uso
cat -v
para mostrar caracteres que no se imprimen.Grep tiene problemas para encontrar NUL ya que se usan para terminar cadenas en C. Sed, sin embargo, puede hacer el trabajo:
† En vi, en el modo de inserción, presione Ctrl- V, Ctrl- Shift- @para insertar un byte nulo.
fuente
Si
grep -P
no funciona (por ejemplo, en OS X), intente esto:fuente
grep -Pa '\x00' ...
En bash, puede agregar caracteres especiales cuando tenga el prefijo
C-q
oC-v
. Entonces puedes, por ejemploLa cadena de búsqueda debe leerse como
control key
+character v
, seguida decontrol key
+character a
, que busca el valor ASCII SOH (01). Desafortunadamente, esto no funciona para el personaje NUL.fuente
^ @ es el carácter NUL. ¿Qué quieres hacer con las líneas de tus archivos que lo contienen?
Puede echar un vistazo a https://stackoverflow.com/questions/2398393/identifying-and-removing-null-characters-in-unix que trata un problema similar.
fuente
El personaje ^ @ es el personaje NUL, por lo que me temo que no se puede asimilar directamente.
Probablemente su mejor opción sea escribir un programa simple que busque esta secuencia de bytes.
Alternativamente, usted puede tratar de convertirlo en algún tipo de volcado hexadecimal (
od
,xxd
o algo así) y grep en la salida de la misma. Pero hablando francamente, sería difícil hacerlo bien.fuente