Comandos LinuxExplicados en español
/
Ficha39 / 104
Categoría
Texto
Ejemplos
5
Ver también
cut · cat · grep · head

tr

tr (de translate, traducir)

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 <.

Sintaxistr [opciones] CONJUNTO1 [CONJUNTO2]
§ 1

Despiece

5 ejemplos
Pasar un texto a mayúsculas

Pasar un texto a mayúsculas

6 piezas
Lámina01 / 05
Comandoecho "hola mundo" | tr a-z A-Z
Piezas6
Escala1:1
N.ºPiezaTipoQué hace
1echoComandoMuestra en pantalla el texto que le pongas entre comillas.
2"hola mundo"ValorEl texto de entrada. Las comillas evitan que el shell lo interprete como algo más.
3|OperadorPipe: lo que escribe echo se convierte en la entrada de tr.
4trComandoEl comando que transforma los caracteres que le lleguen por la entrada.
5a-zValorEl primer conjunto: las letras que va a encontrar. El guion indica el rango de la a a la z.
6A-ZValorEl segundo conjunto: qué pone en su lugar cada letra. La a se vuelve A, la b se vuelve B, y así sucesivamente.
Resultado

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

5 piezas
Lámina02 / 05
Comandotr -d '\r' < datos.csv
Piezas5
Escala1:1
N.ºPiezaTipoQué hace
1trComandoEl comando que transforma los caracteres que le lleguen por la entrada.
2-dOpciónDelete: borra los caracteres del conjunto en vez de cambiarlos.
3'\r'ValorEl 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<OperadorRedirección de entrada: en vez de escribir con el teclado, tr lee el contenido del archivo.
5datos.csvArgumentoEl archivo que quieres limpiar. Ojo: va después de la redirección, no como argumento de tr.
Resultado

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

5 piezas
Lámina03 / 05
Comandotr -s ' ' < notas.txt
Piezas5
Escala1:1
N.ºPiezaTipoQué hace
1trComandoEl comando que transforma los caracteres que le lleguen por la entrada.
2-sOpciónSqueeze repeats: deja una sola copia de cada carácter que se repita seguido.
3' 'ValorEl conjunto es un espacio. Al venir entre comillas se ve que sí es un espacio y no una palabra.
4<OperadorRedirección de entrada: tr lee el archivo en vez de esperar que escribas.
5notas.txtArgumentoEl archivo con los espacios de sobra.
Resultado

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

5 piezas
Lámina04 / 05
Comandotr '[:lower:]' '[:upper:]' < notas.txt
Piezas5
Escala1:1
N.ºPiezaTipoQué hace
1trComandoEl comando que transforma los caracteres que le lleguen por la entrada.
2'[:lower:]'ValorClase 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:]'ValorConjunto con todas las letras mayúsculas, que es lo que se pone en su lugar.
4<OperadorRedirección de entrada: tr lee el archivo.
5notas.txtArgumentoEl archivo que quieres convertir a mayúsculas.
Resultado

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

5 piezas
Lámina05 / 05
Comandotr -cd '[:print:]\n' < salida.txt
Piezas5
Escala1:1
N.ºPiezaTipoQué hace
1trComandoEl comando que transforma los caracteres que le lleguen por la entrada.
2-cdOpciónSon dos opciones juntas: -c invierte el conjunto y -d borra. Juntas borran todo lo que NO esté en el conjunto.
3'[:print:]\n'ValorLos 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<OperadorRedirección de entrada: tr lee el archivo.
5salida.txtArgumentoEl archivo con caracteres de control y basura que quieres limpiar.
Resultado

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.

§ 2

Opciones

Las que sí vas a usar
OpciónQué hace
-d--deleteBorra los caracteres del conjunto en vez de cambiarlos.
-s--squeeze-repeatsJunta en uno solo los caracteres que se repiten seguidos, como tres espacios en uno. Aplica al último conjunto que escribiste.
-c--complementInvierte el conjunto: ahora son todos los caracteres que NO están en él. También se escribe -C.
-t--truncate-set1Recorta el primer conjunto para que tenga el tamaño del segundo antes de hacer el cambio.
§ 3

Fallas comunes

FallaRemedio
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.
§ 4

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.
§ 5

Ver también