viernes, 12 de agosto de 2016

tr

El programa tr se usa para transliterar caracteres. Podemos pensar en esto como un tipo de operación de búsqueda y reemplazo basada en caracteres. La transliteración es el proceso de cambiar caracteres de un alfabeto a otro. Por ejemplo, convertir caracteres de minúscula a mayúscula es transliteración. Podemos realizar esa conversión con tr como sigue:

[me@linuxbox ~]$ echo "lowercase letters" | tr a-z A-Z
LOWERCASE LETTERS

Como podemos ver, tr funciona con la entrada estándar, y muestra sus resultados en la salida estándar. tr acepta dos argumentos: una serie de caracteres de donde convertir y una serie correspondiente de caracteres hacia donde convertir. Las series de caracteres pueden expresarse de tres formas diferentes:
  1. Una lista enumerada. Por ejemplo, ABCDEFGHIJKLMNOPQRSTUVWXYZ
  2. Un rango de caracteres. Por ejemplo, A-Z. Fíjate que este método está sujeto a menudo a los mismos problemas que otros comandos, debido a la secuencia de ordenado de la configuración regional, y por lo tanto hay que usarlo con precaución.
  3. Clases de caracteres POSIX. Por ejemplo, [:upper:].
En la mayoría de los casos, ambas series de caracteres serán de igual longitud; sin embargo, es posible que la primera serie sea más grande que la segunda, particularmente si queremos convertir muchos caracteres a uno único:

[me@linuxbox ~]$ echo "lowercase letters" | tr [:lower:] A
AAAAAAAAA AAAAAAA

Además de la transliteración, tr permite que los caracteres sean simplemente eliminados de la cadena de entrada. Antes, en este capítulo, vimos el problema de convertir archivos de texto MS-DOS a texto estilo-Unix. Para realizar esta conversión, los caracteres de retorno de carro necesitan ser eliminados del final de cada línea. Esto puede realizarse con tr de la forma siguiente:

tr -d '\r' < dos_file > unix_file

donde dos_file es el archivo a convertir y unix_file es el resultado. Esta forma del comando utiliza la secuencia de escape \r para representar el carácter retorno de carro. Para ver una lista completa de las secuencias y clases de caracteres que soporta tr, prueba:

[me@linuxbox ~]$ tr --help

tr también puede realizar otro truco. Usando la opción -s, tr puede "estrujar" (borrar) las instancias repetidas de un caracter:

[me@linuxbox ~]$ echo "aaabbbccc" | tr -s ab
abccc

Aquí tenemos un cadena que contiene caracteres repetidos. Especificando la lista "ab" a tr, eliminamos las instancias repetidas de las letras de la lista, mientras que deja los caracteres que no aparecen en la lista ("c") sin cambios. Fíjate que los caracteres repetidos debe estar contiguos. Si no lo están:

[me@linuxbox ~]$ echo "abcabcabc" | tr -s ab
abcabcabc

la eliminación no tendrá efecto.

No hay comentarios:

Publicar un comentario