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?