jueves, 12 de agosto de 2010

Cómo escapar caracteres para manipularlos en una consola

Esto me dio bastantes problemas la verdad. Tenía un archivo con comandos SQL y otras cosas, entonces era común conseguir comillas simples y dobles por todos lados. Por cuestiones que no vienen al caso, necesitaba manipular cada línea con funciones AWK; el cual colapsaba con todos estos caracteres especiales.

Aquí la solución, primero el comando que me hizo ver la luz:

$ echo $(printf '%q' $line)

La función mostrada arriba escapa todos los caracteres especiales. Ahora sólo me quedaba depurar las líneas del archivo y ejecutar un comando para cada una de ellas:

#!/bin/bash
cat PROBLEMATIC_FILE |
while read line; do
  echo $(printf '%q' $line) |
  awk -v _SQ="'" '{
   # ... process
    print $0
  }' 
done 


2 comentarios:

  1. Hola, excelente publicación, igual tenía el mismo problema.

    Ahora el problema que tengo es que trato de exportarlo en un script en perl y el %q no lo interpreta, en bash si lo interpreta bien pero cuando lo hago en perl me pone el siguiente error: "printf: 1: %q: invalid directive". Si alguien tiene la solución o si la encuentro pondré el comment. Saludos!!

    ResponderEliminar
  2. Niko, si compartes un fragmento del código quizás podría ayudarte... Aunque ya es posible que le hayas dado la vuelta.

    Un saludo y gracias por tus comentarios,

    ResponderEliminar