2010-02-15 11 views
36

Necesito limpiar un archivo. Tenemos un analizador xml que se ejecuta en él que está fallando debido a un carácter de escape (0x1B) en el archivo. ¿Cómo uso vim para encontrar en qué parte del archivo está ese carácter para poder eliminarlo?Use vim para buscar por código hexadecimal

archivo Ejemplo:

<?php 
echo "Hello, world.\n";       
?> 

Después de la conversión:

0000000: 0a3c 3f70 6870 0a65 6368 6f20 2248 656c .<?php.echo "Hel 
0000010: 6c6f 2c20 776f 726c 642e 5c6e 223b 0a3f lo, world.\n";.? 
0000020: 3e0a 

Así que borrar un carácter: (en este ejemplo, la 'H')

0000000: 0a3c 3f70 6870 0a65 6368 6f20 22 656c .<?php.echo "Hel 
0000010: 6c6f 2c20 776f 726c 642e 5c6e 223b 0a3f lo, world.\n";.? 
0000020: 3e0a 

Aviso cómo el La primera línea ya no es lo suficientemente amplia. Cuando convierto de nuevo, me sale:

^@<?php 
echo "el^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@> 

Respuesta

46

búsqueda (por ejemplo, usando /) para \%x1b.

También puede escribir caracteres de control, incluyendo la fuga, en la línea de comandos anterior con Ctrl - V. Así escribir /, Ctrl-V, Esc, Introduzca.

+1

No estoy seguro de cuánto más detalles se necesitan. No te molestes en cambiar a la representación hexadecimal. Vim mostrará un carácter de escape como '^ ['. Búscalo usando cualquiera de mis métodos y, con el cursor sobre él, elimínalo usando 'x'. – Nefrubyr

+0

Para la posteridad: el comentario de nerfrubyr se refería a un comentario que eliminé al solicitar una aclaración. Resulta que estaba escribiendo algo mal. Ambas ideas funcionan muy bien para esto. –

+1

Nota para aquellos que tienen mapeado para "pegar" (por ejemplo, el valor predeterminado en Windows gvim): Tendrá que sustituir por para hacer el mismo truco con los caracteres de control. – Chris

10

Transform vim en un editor hexadecimal haciendo [escape] :%!xxd. Luego busque 0x1B (/1B).

+0

Una vez que lo he abierto en ese modo, ¿cómo elimino ese carácter y lo guardo? –

+1

Use h, j, k, l para navegar hasta el carácter, presione 'r' e ingrese el nuevo carácter. Entonces, escápate: wq para salir y guardar. –

+0

No estoy reemplazando el personaje, lo estoy eliminando. Una vez que se ha eliminado, las filas no coinciden. ¿VIM maneja una fila más corta al traducir del hex visual a ASCII? –

Cuestiones relacionadas