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 tr comando 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. Tipicamente, viene utilizzato in combinazione con altri comandi tramite piping.
In questo tutorial, ti mostreremo come utilizzare il tr comando attraverso esempi pratici e spiegazioni dettagliate delle opzioni più comuni.
Come usare il tr Comando #
La sintassi per tr il comando è il seguente:
tr OPTION... SET1 [SET2]
tr accetta due set di caratteri, generalmente della stessa lunghezza, e sostituisce i caratteri del primo set con i caratteri corrispondenti del secondo set.
Un SET è fondamentalmente una stringa di caratteri, inclusi i caratteri speciali con escape barra rovesciata.
Nell'esempio seguente, tr sostituirà tutti i caratteri dello standard input (linuxize), mappando i caratteri del primo set con quelli corrispondenti del secondo set.
echo 'linuxize' | tr 'lin' 'red'
Ogni occorrenza di l viene sostituito con r , i con e e n con 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 -c (--complement ) viene utilizzata l'opzione tr sostituisce 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 rispetto all'input. Questo perché echo comando stampa un carattere di nuova riga invisibile \n che viene anche sostituito con y . Per fare eco a una stringa senza una nuova riga, usa -n opzione.
Il -d (--delete ) l'opzione dice a tr per eliminare i caratteri specificati in SET1. Quando si eliminano i caratteri senza schiacciarli, specificare un solo set.
Il comando seguente rimuoverà l , i e z caratteri:
echo 'Linuxize' | tr -d 'liz'
La L il carattere non viene eliminato perché l'input include una L maiuscola mentre il l carattere nel SET è minuscolo.
Lnuxe
Il -s (--squeeze-repeats ) l'opzione sostituisce una sequenza di occorrenze ripetute con il set di caratteri nell'ultimo SET.
Nell'esempio seguente, tr rimuove gli spazi ripetuti:
echo "GNU \ Linux" | tr -s ' ' GNU \ Linux
Quando si utilizza SET2, la sequenza dei caratteri specificata in SET1 viene sostituita con SET2.
echo "GNU \ Linux" | tr -s ' ' '_' GNU_\_Linux
Il -t (--truncate-set1 ) l'opzione forza tr per 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 e da SET1 è abbinato all'ultimo carattere di SET2, che è 2 :
Linux iz2
Ora usa lo stesso comando con -t opzione:
echo 'Linux ize' | tr -t 'abcde' '12' Linux ize
Puoi vedere che gli ultimi tre caratteri di SET1 vengono rimossi. SET1 diventa 'ab', la stessa lunghezza di SET2 e non viene effettuata alcuna sostituzione.
Opzioni combinate #
Il tr comando ti consente anche di combinare le sue opzioni. Ad esempio, il comando seguente sostituisce prima tutti i caratteri tranne i con 0 e poi spreme il ripetuto 0 caratteri:
echo 'Linux ize' | tr -cs 'i' '0' 0i0i0
Esempi di comando Tr #
In questa sezione tratteremo alcuni esempi di usi comuni di tr comando.
Converti da minuscolo a maiuscolo #
La conversione da minuscolo a maiuscolo o viceversa è uno dei casi d'uso tipici di tr comando. [: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 utilizzare intervalli:
echo 'Linuxize' | tr 'a-z' 'A-Z' Per convertire le maiuscole in minuscole, cambia semplicemente le posizioni dei set.
Rimuovi tutti i caratteri non numerici #
Il comando seguente rimuove tutti i caratteri non numerici:
echo "my phone is 123-456-7890" | tr -cd [:digit:]
[:digit:] sta per tutti i caratteri numerici e usando il -c opzione, il comando rimuove tutti i caratteri non numerici. L'output sarà simile a questo:
1234567890
Inserisci 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 comprimere i caratteri di nuova riga ripetitivi:
tr -s '\n' < file.txt > new_file.txt
Nel comando sopra stiamo usando il simbolo di reindirizzamento < per passare il contenuto del file.txt al tr comando. Il reindirizzamento > scrive l'output del comando in new_file.txt .
Stampa $PATH directory su una riga separata #
Il $PATH La 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 sostituirlo 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, tr può funzionare solo con singoli caratteri. Per corrispondenze di modelli e manipolazioni di stringhe più complesse, dovresti usare sed o awk .
Se hai domande o feedback, sentiti libero di lasciare un commento.