tr
Cambia, borra o repite caracteres de la entrada.
Transforma los caracteres del texto que le llega por la entrada estándar: los cambia por otros, los borra o junta los que se repiten. Sirve para pasar a mayúsculas, quitar caracteres que estorban o limpiar archivos que vienen de Windows. Ojo: tr no recibe nombres de archivo; el texto le llega por un pipe o con la redirección <.
tr [opciones] CONJUNTO1 [CONJUNTO2]Despiece
5 ejemplosPasar un texto a mayúsculas
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | echo | Comando | Muestra en pantalla el texto que le pongas entre comillas. |
| 2 | "hola mundo" | Valor | El texto de entrada. Las comillas evitan que el shell lo interprete como algo más. |
| 3 | | | Operador | Pipe: lo que escribe echo se convierte en la entrada de tr. |
| 4 | tr | Comando | El comando que transforma los caracteres que le lleguen por la entrada. |
| 5 | a-z | Valor | El primer conjunto: las letras que va a encontrar. El guion indica el rango de la a a la z. |
| 6 | A-Z | Valor | El segundo conjunto: qué pone en su lugar cada letra. La a se vuelve A, la b se vuelve B, y así sucesivamente. |
Imprime HOLA MUNDO. El primer conjunto es lo que tr busca y el segundo es lo que escribe, por eso van en ese orden.
Quitar el carácter que deja Windows
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | tr | Comando | El comando que transforma los caracteres que le lleguen por la entrada. |
| 2 | -d | Opción | Delete: borra los caracteres del conjunto en vez de cambiarlos. |
| 3 | '\r' | Valor | El conjunto es el retorno de carro, que tr entiende al ver \r. Las comillas evitan que el shell se coma la diagonal invertida antes de que llegue a tr. |
| 4 | < | Operador | Redirección de entrada: en vez de escribir con el teclado, tr lee el contenido del archivo. |
| 5 | datos.csv | Argumento | El archivo que quieres limpiar. Ojo: va después de la redirección, no como argumento de tr. |
El archivo sale en pantalla sin el carácter de retorno de carro que Windows mete al final de cada línea. Sin esa limpieza, un CSV descargado de una máquina Windows puede venir con saltos de línea raros que rompen otros programas.
Juntar espacios de más
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | tr | Comando | El comando que transforma los caracteres que le lleguen por la entrada. |
| 2 | -s | Opción | Squeeze repeats: deja una sola copia de cada carácter que se repita seguido. |
| 3 | ' ' | Valor | El conjunto es un espacio. Al venir entre comillas se ve que sí es un espacio y no una palabra. |
| 4 | < | Operador | Redirección de entrada: tr lee el archivo en vez de esperar que escribas. |
| 5 | notas.txt | Argumento | El archivo con los espacios de sobra. |
Donde había tres espacios seguidos ahora hay uno. Ojo: -s los reduce, no los borra; para quitarlos por completo se usa tr -d ' '.
Usar conjuntos de caracteres
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | tr | Comando | El comando que transforma los caracteres que le lleguen por la entrada. |
| 2 | '[:lower:]' | Valor | Clase con todas las letras minúsculas. Los corchetes son parte del nombre de la clase y las comillas evitan que el shell los interprete. |
| 3 | '[:upper:]' | Valor | Conjunto con todas las letras mayúsculas, que es lo que se pone en su lugar. |
| 4 | < | Operador | Redirección de entrada: tr lee el archivo. |
| 5 | notas.txt | Argumento | El archivo que quieres convertir a mayúsculas. |
El archivo sale con todo el texto en mayúsculas. Además de [:lower:] y [:upper:] existen [:digit:], [:space:], [:alpha:] y [:alnum:], entre otros. Ojo: tr trabaja byte por byte, así que las letras con acento y la ñ se quedan igual (canción sale CANCIóN).
Dejar solo lo que se puede imprimir
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | tr | Comando | El comando que transforma los caracteres que le lleguen por la entrada. |
| 2 | -cd | Opción | Son dos opciones juntas: -c invierte el conjunto y -d borra. Juntas borran todo lo que NO esté en el conjunto. |
| 3 | '[:print:]\n' | Valor | Los caracteres imprimibles más el salto de línea, que se escribe \n. El salto se conserva para no pegarte todo en una sola línea. |
| 4 | < | Operador | Redirección de entrada: tr lee el archivo. |
| 5 | salida.txt | Argumento | El archivo con caracteres de control y basura que quieres limpiar. |
Desaparecen los caracteres de control y los bytes que no son imprimibles, y el texto conserva sus saltos de línea. Ojo: también borra los tabuladores y los bytes de las letras con acento, y en una salida con colores solo quita el carácter de escape, así que quedan restos como [31m.
Opciones
Las que sí vas a usar| Opción | Qué hace |
|---|---|
| -d--delete | Borra los caracteres del conjunto en vez de cambiarlos. |
| -s--squeeze-repeats | Junta en uno solo los caracteres que se repiten seguidos, como tres espacios en uno. Aplica al último conjunto que escribiste. |
| -c--complement | Invierte el conjunto: ahora son todos los caracteres que NO están en él. También se escribe -C. |
| -t--truncate-set1 | Recorta el primer conjunto para que tenga el tamaño del segundo antes de hacer el cambio. |
Fallas comunes
| Falla | Remedio |
|---|---|
| Pasarle el archivo como argumento: tr a-z A-Z notas.txt. | tr responde tr: extra operand 'notas.txt'. tr nunca recibe nombres de archivo, siempre lee de la entrada estándar. Usa la redirección (tr a-z A-Z < notas.txt) o un pipe (cat notas.txt | tr a-z A-Z). |
| Escribir los rangos al revés esperando pasar a mayúsculas: tr A-Z a-z. | Eso hace lo contrario: convierte las mayúsculas en minúsculas. El primer conjunto es lo que tr encuentra y el segundo es lo que pone, así que para pasar a mayúsculas se escribe tr a-z A-Z. |
| Esperar que tr borre palabras completas con tr -d 'error'. | tr trabaja carácter por carácter, no con palabras. tr -d 'error' borra las letras e, r, o de todo el texto, una por una. Para quitar una palabra completa hay que borrarla con grep -v o con sed. |
| Confundir -s con -d y esperar que los espacios desaparezcan. | -s solo reduce las repeticiones: cinco espacios se vuelven uno. Para borrarlos por completo usa -d, como en tr -d ' ' < archivo.txt. |
Preguntas frecuentes
- ¿Cómo paso un archivo a mayúsculas con tr?
- Con tr a-z A-Z < archivo.txt. El primer conjunto son las letras que busca (las minúsculas) y el segundo lo que escribe en su lugar (las mayúsculas). También puedes usar clases: tr '[:lower:]' '[:upper:]' < archivo.txt. Ninguna de las dos convierte letras con acento ni la ñ.
- ¿Cómo le paso un archivo a tr?
- tr no acepta nombres de archivo como argumento; si se lo das responde tr: extra operand 'notas.txt'. Lo alimentas con la redirección de entrada, tr a-z A-Z < notas.txt, o con un pipe, cat notas.txt | tr a-z A-Z.
- ¿Qué hace tr -s?
- Es squeeze repeats: deja una sola copia de los caracteres que se repiten seguidos, así que tres espacios se convierten en uno. Ojo, no los borra: para eso está tr -d ' ', que elimina todos los espacios.
- ¿Cuál es la diferencia entre tr y sed?
- tr solo transforma, borra o comprime caracteres, y siempre lee de la entrada estándar. sed edita líneas completas usando patrones: puede cambiar partes, borrar líneas o insertar texto. Para un cambio de caracteres sencillo alcanza tr; para algo más armado, sed.
- ¿Cómo limpio un archivo de texto que viene de Windows?
- Quita el carácter de retorno de carro con tr -d '\r' < archivo.txt. Windows termina cada línea con dos caracteres, el retorno de carro y el salto de línea, y ese primero es el que confunde a los programas de Linux.