Overview
en Linux, hay muchas utilidades de línea de comandos para la manipulación de texto a nuestra disposición. En este tutorial, discutiremos el comando tr.
Introducción al comando tr
tr es la abreviatura de «traducir». Es miembro del paquete GNU coreutils. Por lo tanto, está disponible en Todas las distribuciones de Linux.
el comando tr lee un flujo de bytes de la entrada estándar (stdin), traduce o elimina caracteres, luego escribe el resultado en la salida estándar (stdout).,
la sintaxis de uso de tr es bastante sencilla:
tr SET1
Si no pasamos ninguna opción A tr, reemplazará cada carácter en SET1 con cada carácter en la misma posición en SET2.
dado que tr no admite la lectura directa de un archivo, si queremos aplicarlo a un archivo de texto, necesitamos canalizar el contenido del archivo a tr o redirigir el archivo a stdin.,
Podemos usar tr para realizar transformaciones de texto como:
- conversión de mayúsculas y minúsculas
- exprimir caracteres repetidos
- eliminar caracteres específicos
- reemplazo básico de texto
veamos algunos ejemplos para aprender a manipular texto usando tr.
convertir minúsculas a mayúsculas
comenzaremos con un problema básico: convertir todos los caracteres minúsculas a mayúsculas en un archivo.,
echemos un vistazo a cómo resolver el problema usando el comando tr:
$ cat baeldung.urlwww.baeldung.com$ tr 'a-z' 'A-Z' < baeldung.urlWWW.BAELDUNG.COM
en el ejemplo anterior, redireccionamos un archivo baeldung.url a stdin y pidió a tr que hiciera la conversión de mayúsculas y minúsculas. Usamos rangos de caracteres tanto en SET1 como en SET2 para hacer la conversión de mayúsculas y minúsculas.
alternativamente, también podemos resolver el problema usando un par de alias de conjuntos de caracteres incorporados:
$ tr '' '' < baeldung.url WWW.BAELDUNG.COM
porque tr solo escribirá el resultado en stdout, después de ejecutarlo, nuestro baeldung.el archivo url no se cambia., Si queremos que el resultado traducido se escriba de nuevo en el archivo de entrada, podemos redirigir stdout a un archivo temporal y luego renombrar y sobrescribir el archivo de entrada:
$ tr 'a-z' 'A-Z' < baeldung.url >tmp.txt && mv tmp.txt baeldung.url $ cat baeldung.urlWWW.BAELDUNG.COM
buscar y reemplazar básico
la utilidad tr es útil para algunas operaciones simples de «buscar y reemplazar» donde un carácter debe ser reemplazado por otro. Por ejemplo, vamos a reemplazar todos los guiones por guiones bajos en un archivo:
$ cat env.txt$JAVA-HOME and $MAVEN-HOME are system variables.$ cat env.txt | tr '-' '_'$JAVA_HOME and $MAVEN_HOME are system variables.
en lugar de usar redirección, usamos el comando cat para canalizar el contenido del archivo env.txt A tr.,
además de encontrar y reemplazar un solo carácter, tr también puede reemplazar varios caracteres. Veamos otro ejemplo de traducción de llaves entre paréntesis:
$ echo "{baeldung}" | tr '{}' '()'(baeldung)
También podemos usar tr para hacer la traducción del rango de caracteres., en este ejemplo, usaremos el cifrado César simple como nuestro algoritmo de cifrado: reemplace cada letra en el texto de entrada por una letra un número fijo de posiciones en el alfabeto, por ejemplo, cambiando» a «en» e», cambiando» b «en» f», y así sucesivamente:
$ echo "this is a secret message" | tr 'a-z' 'e-zabcd' > secret.txt$ cat secret.txtxlmw mw e wigvix qiwweki
para descifrar el archivo secreto, intercambiamos SET1 y SET2 en el comando tr anterior:
$ tr 'e-zabcd' 'a-z' < secret.txt this is a secret message
truncar un patrón de búsqueda
si revisamos los ejemplos en la sección anterior, notamos que set1 y Set2 que pasamos a tr siempre tenían la misma longitud.,
veamos qué nos dará tr si SET2 es más corto que SET1:
$ echo "abcdefg" | tr 'abcdefg' 'ABC'ABCCCCC
cuando SET2 es más corto que SET1, el comando tr, por defecto, repetirá el último carácter de SET2. Por lo tanto, vemos en la salida anterior, la última letra en SET2, que es una «C», se repite para que coincida con las letras de «d» A «g». Así que el comando se convierte en tr ‘abcdefg »ABCCCCC’.,
Podemos usar la opción truncar «-t» para cambiar este comportamiento predeterminado, para dejar que tr limite la coincidencia a la longitud del SET2:
$ echo "abcdefg" | tr -t 'abcdefg' 'ABC' ABCdefg
Squeeze Repeating Characters
podemos eliminar instancias repetidas de un carácter usando tr con la opción squeeze «-s».
veamos un ejemplo de convertir múltiples espacios continuos a un solo espacio:
$ echo 'Hi, nice to meet you!' | tr -s ' ' Hi, nice to meet you!
si pasamos la opción-s junto con SET1 y SET2 A tr, primero hará la traducción, luego apretará caracteres repetidos en SET2., Por ejemplo:
$ echo 'TODAYYYY IIIS SOOO COOOLD ~' | tr -s 'A-Z' 'a-z' today is so cold ~
Eliminar caracteres específicos
podemos pasar la opción «-d» A tr para eliminar caracteres en SET1.
no como la opción «- s», cuando pasamos»- d » junto con SET1 y SET2 a tr, el SET2 será ignorado y no se hará ninguna traducción.
por ejemplo, queremos eliminar todas las letras minúsculas del texto de entrada:
$ echo "A a B b C c" | tr -d 'a-z'A B C
buscar el complemento de SET1
podemos pasar la opción «-c» A tr, para que busque un complemento de SET1., Buscar el complemento de SET1 significa buscar el inverso de SET1.
a veces esta opción puede simplificar la definición de SET1.
por ejemplo, nos gustaría hacer coincidir cualquier carácter que no sea una letra minúscula y traducirlo a espacios en blanco:
$ echo "#aMvery~handy tool" | tr -c 'a-z' ' 'tr is a very handy tool
También podemos combinar la opción «-c» con «-d» O «-s». El siguiente ejemplo muestra cómo podemos extraer el número de identificación del cliente.archivo csv:
en el ejemplo anterior, debemos incluir el carácter de nueva línea (\n) en SET1., De lo contrario, todos los saltos de línea en el archivo de entrada también se eliminarán, y tendremos todos los números de identificación concatenados juntos en una sola línea. Esto no es lo que queremos.
conclusión
en este artículo, hemos aprendido a usar el comando tr a través de varios ejemplos.
el comando tr es una buena opción si necesitamos hacer alguna transformación de texto fundamental, como la conversión de mayúsculas y minúsculas o la compresión de caracteres repetidos.
sin embargo, si nos enfrentamos a problemas complejos de procesamiento de texto, deberíamos pensar en utilidades más poderosas como awk o sed.