Comando TR

11 / 100

Comando tr

Il comando tr permette di modificare o cancellare caratteri da uno stream di input. tr è un’utilità della riga di comando nei sistemi Linux e Unix che traduce, elimina e comprime i caratteri dallo standard input e scrive il risultato nello standard output. Il comando tr può eseguire operazioni come la rimozione di caratteri ripetuti, la conversione da maiuscolo a minuscolo e la sostituzione e la rimozione di caratteri di base.
In genere, viene utilizzato in combinazione con altri comandi .

In questo tutorial, mostreremo spiegazioni dettagliate delle opzioni più comuni.

Come usare il comando tr

La sintassi del comando tr è la seguente:

tr OPTION… SET1 [SET2]

tr accetta due set di caratteri, solitamente della stessa lunghezza, e sostituisce i caratteri dei primi set con i caratteri corrispondenti del secondo set.

SET è fondamentalmente una stringa di caratteri, inclusi i caratteri speciali sfuggiti alla barra rovesciata.

Nell’esempio seguente, trsostituirà tutti i caratteri dallo standard input (linuxize), mappando i caratteri del primo set con quelli corrispondenti del secondo set.

$ echo ‘linuxize’ | tr ‘lin’ ‘red’

Ogni occorrenza di lviene sostituita con r, icon ee ncon d:

reduxeze

I set di caratteri possono essere definiti anche utilizzando intervalli di caratteri. Ad esempio, invece di scrivere:

$ echo ‘linuxize’ | tr ‘lmno’ ‘wxyz’

Puoi usare:

$ echo ‘linuxize’ | tr ‘l-n’ ‘w-z’

Quando viene utilizzata l’opzione -c( –complement), trsostituisce tutti i caratteri che non sono in SET1.

Nell’esempio seguente tutti i caratteri tranne “li” verranno sostituiti con l’ultimo carattere del secondo set:

$ echo ‘linuxize’ | tr -c ‘li’ ‘xy’

liyyyiyyy

Come avrai notato, l’output sopra ha un carattere più visibile dell’input. Questo perché il echo comando stampa un carattere di nuova riga invisibile \nche viene anche sostituito con y. Per eseguire l’eco di una stringa senza una nuova riga, utilizzare l’ -nopzione.

L’ opzione -d( –delete) dice tr di eliminare i caratteri specificati in SET1. Quando si eliminano i caratteri senza comprimerli, specificare solo un set.

Il comando di seguito rimuoverà l, ie z personaggi:

$ echo ‘Linuxize’ | tr -d ‘liz’

Il carattere L non viene cancellato perché l’input include una maiuscola Lmentre il carattere l nel SET è minuscolo.

Lnuxe

L’ opzione -s ( –squeeze-repeats) sostituisce una sequenza di occorrenze ripetute con il set di caratteri nell’ultimo SET.

Nell’esempio seguente, tr rimuove i caratteri di spazio ripetuti:

$ echo “GNU \ Linux” | tr -s ‘ ‘

GNU \ Linux

Quando si utilizza SET2 la sequenza del carattere specificata in SET1 viene sostituita con SET2.

$ echo “GNU \ Linux” | tr -s ‘ ‘ ‘_’

GNU__Linux

L’ opzione -t ( –truncate-set1) impone tr di troncare SET1 alla lunghezza di SET2 prima di eseguire ulteriori elaborazioni.

Per impostazione predefinita, se SET1 è maggiore di SET2 tr riutilizzerà l’ultimo carattere di SET2.

Ecco un esempio:

$ echo ‘Linux ize’ | tr ‘abcde’ ’12’

L’output mostra che il carattere edi SET1 è abbinato all’ultimo carattere di SET2, che è 2:

Linux iz2

Ora, usa lo stesso comando con l’ -topzione:

$ echo ‘Linux ize’ | tr -t ‘abcde’ ’12’

Linux ize

Puoi vedere che gli ultimi tre caratteri del SET1 vengono rimossi. SET1 diventa ‘ab’, della stessa lunghezza di SET2, e non viene effettuata alcuna sostituzione.

Combinazione di opzioni


Il comando tr consente anche di combinare le sue opzioni.

Ad esempio, il seguente comando prima sostituisce tutti i caratteri tranne icon 0e poi comprime i 0caratteri ripetuti :

$ echo ‘Linux ize’ | tr -cs ‘i’ ‘0’

0i0i0

Esempi di comandi T


In questa sezione, tratteremo alcuni esempi di usi comuni del trcomando.

Converti da minuscolo a maiuscolo
La conversione da minuscolo a maiuscolo o viceversa è uno dei casi d’uso tipici del trcomando. [:lower:]corrisponde a tutti i caratteri minuscoli e [:upper:]corrisponde a tutti i caratteri maiuscoli.

$ echo ‘Linuxize’ | tr ‘[:lower:]’ ‘[:upper:]’

LINUXIZE

Invece delle classi di caratteri, puoi anche usare gli intervalli:

$ echo ‘Linuxize’ | tr ‘a-z’ ‘A-Z’

Per convertire le maiuscole in minuscole, è sufficiente scambiare le posizioni dei set.

Rimuovi tutti i caratteri non numerici
Il seguente comando rimuove tutti i caratteri non numerici:

$ echo “my phone is 123-456-7890” | tr -cd [:digit:]

[:digit:]sta per tutti i caratteri numerici e, utilizzando l’ -copzione, il comando rimuove tutti i caratteri non numerici. L’output sarà simile a questo:

1234567890

Metti ogni parola in una nuova riga
Per inserire ogni parola in una nuova riga, dobbiamo abbinare tutti i caratteri non alfanumerici e sostituirli con una nuova riga:

$ echo ‘GNU is an operating system’ | tr -cs ‘[:alnum:]’ ‘\n’

GNU
is
an
operating
system

Rimuovi le righe vuote
Per eliminare le righe vuote è sufficiente premere i caratteri di nuova riga ripetitivi:

$ tr -s ‘\n’ < file.txt > new_file.txt

Nel comando sopra stiamo usando il simbolo di reindirizzamento scrive l’output del comando in new_file.txt.

Stampa $PATHdirectory su una riga separata
La $PATH variabile ambientale è un elenco di directory delimitato da due punti che indica alla shell quali directory cercare i file eseguibili quando si digita un comando.

Per stampare ogni directory su una riga separata dobbiamo far corrispondere i due punti ( :) e sostituirli con la nuova riga:

$ echo $PATH | tr ‘:’ ‘\n’

/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin

Conclusione
tr è un comando per tradurre o eliminare caratteri.

Sebbene molto utile, trpuò funzionare solo con singoli caratteri. Per la corrispondenza di modelli più complessi e la manipolazione delle stringhe, dovresti usare sed o awk .