[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Cambio repentino de archivo de texto normal a archivo binario



Hola

On 29/04/16 22:22, Debianero wrote:
On Fri, Apr 29, 2016 at 10:22:23PM +0200, Santiago Vila wrote:
egrep -i texto-a-buscar archivo-texto
Coincidencia en el fichero binario archivo-texto
Usa la opción -a:

grep -a -i texto-a-buscar archivo-texto

o si lo prefieres:

grep -ai texto-a-buscar archivo-texto
¡¡¡Genial, si funciona!!!. Con esto resuelvo parte del problema inmediato. Pero agradezco muchisimo. Ahora a buscar el ¿Porque se convierte en binario? ¿Con que simbolo?.
Sí, con "-a" funciona... tambíen si usas el comando "strings"; allí descarta lo binario y muestra texto; luego de eso puedes usar grep, pero como dices: queda el problema principal sin resolverse. Veo que en el script te faltó "echo" en la línea que dice:

$ $agregartexto >> miarchivo.txt

Debería ser

$ echo $agregartexto >> miarchivo.txt

Pero supongo que no hay problema con eso porque fue una ejemplificación para el correo a la lista y no que esté siendo ejecutado de esa forma, porque no añadiría las líneas.

Adjunta un fragmento de varias líneas con "cat -A" sobre el archivo si te está diciendo en este momento lo de que es binario... intenta conseguir un archivo mínimo que haga que diga que es binario sin que lo sea.

¿Ese archivo sólo es escribible de esa forma? o sea, ¿agregando líneas al final desde la consola? recuerdo que lo editaban con emacs, entonces ¿no será que emacs está trabajando en otra codificación y lo modifica así? no conozco emacs como para ver eso.

¿Eso de agregar líneas lo hacen remotamente también? es decir, por ssh por ejemplo desde máquinas distintas donde tal vez el emulador de terminal no esté bajo UTF-8 y el archivo a veces tiene líneas escritas bajo UTF-8 y las remotas bajo, por ejemplo iso8859-1. En ese caso, grep dice que es binario si se agregan diacríticos al archivo bajo distintas codificaciones.

Por ejemplo (asumiendo que usas UTF-8):

$ echo aá > archivo-texto
$ echo bá | iconv -t latin1 >> archivo-texto
$ grep a archivo-texto
$ grep b archivo-texto

Con la última línea verás cómo dice que hay coincidencia en el archivo binario, porque la línea que tiene la letra "b" tiene al lado una "á" (a, acentuada) que está bajo iso8859-1 (latin1) y es el byte E1 en hexadecimal, que no representa nada en UTF-8 sino *quizá* el primer byte de un caracter de 2, 3 o 4 bytes, que es como funciona UTF-8. Cuando te tiene que mostrar la línea que tiene la "b" va a mostrar un byte que en hexadecimal es E1, y que en UTF-8 no corresponde con nada; allí dice que es binario porque no tendría nada que mostrar.

¿Cuál es el contenido de la variable $TERM y de la variable $LANG?



Reply to: