tr (traducir)
100%

Text-Fu · Lección 13

tr (traducir)

Aprende a traducir, eliminar y comprimir conjuntos de caracteres de un flujo de entrada estándar.

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.

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:

  1. Orden tr de Linux: traducción de caracteres - Aprende a usar tr para 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
Siguiente Lección
Volver a Text-Fu