Tips del Sysadmin – Buscando con grep en archivos UTF-16

En este Tip de Sysadmin quiero compartirles algo que me ha pasado cuando me vi en la necesidad de encontrar una cadena de caracteres en archivos cuya codificación era UTF-16.

Cuando trabajamos en ambientes mixtos y debemos intercambiar archivos entre los distintos entornos nos vamos a encontrar con este tipo de situaciones donde la codificación de los archivos no coincide entre los distintos «universos».

No es la idea de este post explicar el funcionamiento de grep (al menos en esta oportunidad) o explicar la codificación UTF-16 y UTF-8, Lo que busco es simplemente compartir como he solucionado este contratiempo.

¡Comencemos!

El hecho era que necesitaba buscar determinada cadena de caracteres dentro de un directorio con mas de 1500 archivos que habían sido obtenidos exportando procedimientos almacenados desde un servidor Microsoft Sql Server.

Cuando estando en el directorio en cuestión ejecutaba la instrucción: grep -i [cadena] * no obtenía ningún resultado. ¿Como puede ser, si SIEMPRE encuentro todo lo que necesito con grep?.

Ya había comprobado que por ejemplo el término «select» estaba presente en la mayoría de los archivos, pero ¡no había caso!, seguía sin aparecer…

Hasta que se me prendió la lamparita…

Pensé, seguro que esta en otra codificación y este grep #@!&%% no lo encuentra, vamos a comprobarlo con el comando file, ingresando:

grep1

Como se aprecia arriba, el archivo es UTF-16, entonces… ¿cómo lo paso a UTF-8, que es como SEGURO grep me va a funcionar?, con el comando iconv

grep2

Donde, le decimos que vamos a transformar del formato UTF-16 al formato UTF-8 al archivo procedimiento_almacenado.sql que vamos a guardar como procedimiento_almacenado.sql.utf-8

Ahora… voy a probar mi búsqueda nuevamente en el archivo convertido a UTF-8

grep5

¡JOYA! anduvo maravillosamente…

Ahora… estar haciendo, esto archivito por archivito, al menos para mí es demasiado tedioso. Lo que necesitamos es ejecutar este comando para la totalidad de los archivos en el directorio, ¿cómo?

grep4

Ahí decimos que a todos los archivos que tienen como extensión sql lo vamos a transformar del formato UTF-16 al UTF-8 y a cada archivo convertido lo vamos a guardar agregándole la extensión utf-8.

Hecho esto… vamos a tener esa chorrera de archivos ya convertidos y vamos a poder hacer nuestras búsquedas sin ningún tipo de problemas.

Espero que les sea de utilidad, y como siempre… ¡No dejen de compartir!

¡Buen fin de semana!

Eduardo

Deja una respuesta