La orden tr, abreviatura de translate (traducir), traduce, elimina o comprime caracteres leídos de la entrada estándar. No acepta operandos normales de archivo de entrada, así que proporciona los datos mediante una tubería o una redirección de entrada.
Text-Fu · Lección 13
tr (traducir)
Aprende a traducir, eliminar y comprimir conjuntos de caracteres de un flujo de entrada estándar.
La sintaxis básica es:
tr [OPTIONS] SET1 [SET2]
tr trabaja con conjuntos de caracteres, no con palabras ni expresiones regulares generales. Usa otra herramienta cuando una transformación dependa de una palabra completa, de la estructura de una línea o del contexto circundante.
Traducir caracteres
Con dos conjuntos, los caracteres de SET1 se corresponden por posición con los de SET2:
$ echo "hello world" | tr a-z A-Z
HELLO WORLD
Aquí, las posiciones del intervalo de minúsculas se corresponden con las del intervalo de mayúsculas. Pon entre comillas las expresiones de conjuntos para que el shell las entregue sin cambios.
También puedes traducir un carácter a otro:
$ echo "2026-06-23" | tr '-' '/'
2026/06/23
$ echo "abc123" | tr 'abc' 'ABC'
ABC123
Los caracteres que no están en SET1 pasan sin cambios.
¿Qué imprime printf '%s\n' 'abc123' | tr 'abc' 'ABC'?
Eliminar caracteres
Usa -d con un conjunto para eliminar cada carácter coincidente:
$ echo "My address is 123 Main Street" | tr -d '0-9'
My address is Main Street
Cada dígito se elimina de forma independiente; tr no identifica un token numérico completo.
Las clases de caracteres pueden describir grupos definidos por la configuración regional actual:
$ echo "Hello, world!" | tr -d '[:punct:]'
Hello world
Eliminar los saltos de línea une las líneas de entrada sin insertar un separador de reemplazo:
$ printf "one\ntwo\nthree\n" | tr -d '\n'
onetwothree
:::single-choice{#tr-delete-digits} ¿Qué orden elimina todos los dígitos de la entrada estándar y deja sin cambios los demás caracteres?
::option[tr -d '[:digit:]']{#tr-delete-digit-class .correct explanation="La opción -d elimina del flujo de entrada todos los caracteres de la clase de dígitos."}
::option[tr -s '[:digit:]']{#tr-squeeze-digits explanation="La opción -s comprime los dígitos repetidos, pero deja un carácter de cada secuencia."}
::option[tr '[:digit:]']{#tr-one-set-no-delete explanation="La traducción suele necesitar un segundo conjunto. Un conjunto por sí solo no solicita la eliminación."}
:::
Comprimir caracteres repetidos
Usa -s SET para sustituir cada secuencia de un carácter indicado por una sola aparición de ese carácter:
$ echo "Hello World, how are you?" | tr -s ' '
Hello World, how are you?
Este conjunto contiene un espacio normal, por lo que esa orden no comprime tabulaciones ni saltos de línea.
También puedes comprimir saltos de línea repetidos:
$ printf "one\n\n\nTwo\n" | tr -s '\n'
one
Two
¿Qué orden reduce cada secuencia de espacios normales de la entrada estándar a un solo espacio?
Usar clases de caracteres y complementos
En muchas configuraciones regionales, las clases de caracteres expresan la intención con mayor claridad que los intervalos escritos a mano. Entre las clases habituales se encuentran:
[:lower:]: letras minúsculas.[:upper:]: letras mayúsculas.[:digit:]: dígitos.[:alpha:]: letras.[:alnum:]: letras y dígitos.[:space:]: caracteres de espacio en blanco.[:punct:]: caracteres de puntuación.
Por ejemplo, convierte texto en minúsculas a mayúsculas con clases de caracteres:
$ echo "linux journey" | tr '[:lower:]' '[:upper:]'
LINUX JOURNEY
La opción -c complementa SET1, es decir, representa todos los caracteres que no están en el conjunto. Combínala con -d para conservar solo ciertos tipos de caracteres:
$ echo "user@example.com!" | tr -cd '[:alnum:]'
userexamplecom
Esto también elimina el salto de línea porque no es alfanumérico. Añade o conserva separadores de forma deliberada cuando los límites de los registros sean importantes.
¿Qué hace tr -cd '[:alnum:]' con la entrada estándar?
Construir transformaciones de flujos
Se pueden conectar varios procesos tr cuando las transformaciones resulten más claras como etapas separadas:
$ echo "Hello,,, world!!!" | tr -d '[:punct:]' | tr -s ' '
Hello world
Para una entrada sencilla separada por tabulaciones, traduce los caracteres de tabulación a comas:
$ printf "name\tlevel\npete\tbeginner\n" | tr '\t' ','
name,level
pete,beginner
Como tr lee de la entrada estándar, se puede proporcionar un archivo mediante <:
$ tr '[:lower:]' '[:upper:]' < names.txt
Redirige la salida estándar a otro archivo si necesitas guardar el resultado. No la redirijas a la ruta de entrada, porque el shell la truncaría antes de que tr pudiera leerla.
:::single-choice{#tr-read-file-input} ¿Qué orden hace que tr lea names.txt como entrada estándar y convierta los caracteres en minúsculas a mayúsculas?
::option[tr names.txt '[:lower:]' '[:upper:]']{#tr-file-operand explanation="tr no acepta un nombre de archivo de entrada normal de este modo; el operando adicional hace que la sintaxis no sea válida."}
::option[tr -d '[:lower:]' < names.txt]{#tr-delete-lowercase explanation="Esto lee el archivo correctamente, pero elimina las letras minúsculas en vez de traducirlas."}
::option[tr '[:lower:]' '[:upper:]' < names.txt]{#tr-input-redirection .correct explanation="El shell abre names.txt en la entrada estándar y tr asigna la clase de minúsculas a la de mayúsculas."}
:::
Para practicar transformaciones de flujos carácter por carácter, prueba este laboratorio práctico:
- Orden tr de Linux: traducción de caracteres - Aprende a usar
trpara transformar caracteres en flujos de texto. Practicarás la traducción y eliminación de caracteres concretos, las clases de caracteres y la compresión de caracteres repetidos.
Lección completada
Has completado tr (traducir)
Ahora puedes transformar flujos de caracteres mediante operaciones específicas de tr.
Asigna caracteres entre conjuntos correspondientes.
Elimina caracteres seleccionados con
-d.Comprime caracteres repetidos con
-s.Usa deliberadamente clases dependientes de la configuración regional y complementos.
Proporciona la entrada mediante la entrada estándar, no como un operando de nombre de archivo.
Guarda tu progreso
Crea una cuenta gratuita para guardar esta lección y continuar en cualquier dispositivo.
Crear una cuenta gratuita