tr
è un programma di utilità a riga di comando nei sistemi Linux e Unix che traduce, elimina, e comprime i caratteri dallo standard input e scrive il risultato allo standard output.
Il comandotr
può eseguire operazioni come la rimozione di caratteri ripetuti, la conversione da maiuscolo a minuscolo e la sostituzione e rimozione di caratteri di base. In genere, viene utilizzato in combinazione con altri comandi tramite piping.,
In questo tutorial, vi mostreremo come utilizzare il comando tr
attraverso esempi pratici e spiegazioni dettagliate delle opzioni più comuni.
Come Utilizzare il Comando tr #
La sintassi per il tr
comando è la seguente:
tr OPTION... SET1
tr
accetta due insiemi di caratteri, di solito con la stessa lunghezza, e sostituisce i caratteri del primo set con i corrispondenti caratteri del secondo set.,
A SET
è fondamentalmente una stringa di caratteri, inclusi i caratteri speciali con escape backslash.
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
è sostituita con r
i
con e
e n
con d
:
reduxeze
Il set di caratteri possono anche essere definite utilizzando le gamme di caratteri., Per esempio, invece di scrivere:
echo 'linuxize' | tr 'lmno' 'wxyz'
è possibile utilizzare:
echo 'linuxize' | tr 'l-n' 'w-z'
Quando -c
(--complement
) opzione viene utilizzata, tr
sostituisce tutti i caratteri che non sono in SET1.
Nell’esempio seguente tutti i caratteri tranne “li” saranno sostituiti con l’ultimo carattere del secondo set:
echo 'linuxize' | tr -c 'li' 'xy'
liyyyiyyy
Come avrete notato, l’output sopra ha un carattere più visibile dell’input., Questo perché il comandoecho
stampa un carattere di nuova riga invisibile\n
che viene anche sostituito cony
. Per fare eco a una stringa senza una nuova riga, utilizzare l’opzione-n
.
L’opzione-d
(--delete
) indica atr
di eliminare i caratteri specificati in SET1. Quando si eliminano i caratteri senza spremere, specificare un solo set.,
Il comando riportato di seguito per rimuovere l
i
e z
caratteri:
echo 'Linuxize' | tr -d 'liz'
L
carattere non viene eliminato perché l’ingresso è dotato di un maiuscolo L
mentre l
carattere della serie è in 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 specificato in SET1 viene sostituita con SET2.
echo "GNU \ Linux" | tr -s ' ' '_'
GNU_\_Linux
L’opzione -t
(--truncate-set1
) forza tr
a tronca SET1 alla lunghezza di SET2 prima di eseguire ulteriori elaborazioni.,
Per impostazione predefinita, se SET1 è più grande di SET2tr
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 con l’ultimo personaggio di SET2, che è 2
:
Linux iz2
Ora, utilizzare lo stesso comando con il -t
opzioni:
echo 'Linux ize' | tr -t 'abcde' '12'
Linux ize
Si può vedere che gli ultimi tre caratteri del SET1 vengono rimossi., SET1 diventa ‘ab’, la stessa lunghezza di SET2, e non viene effettuata alcuna sostituzione.
Combinazione di opzioni #
Il comandotr
consente anche di combinare le sue opzioni. Per esempio, il comando riportato di seguito sostituisce tutti i caratteri tranne i
con 0
e poi stringe le ripetute 0
caratteri:
echo 'Linux ize' | tr -cs 'i' '0'
0i0i0
Comando Tr Esempi di #
In questa sezione, vedremo alcuni esempi di usi comuni del tr
comando.,
Converti minuscolo in maiuscolo #
Convertire minuscolo in maiuscolo o inverso è uno dei casi d’uso tipici del comandotr
. corrisponde a tutti i caratteri minuscoli e
corrisponde a tutti i caratteri maiuscoli.
echo 'Linuxize' | tr '' ''
LINUXIZE
Invece di classi di caratteri, è anche possibile utilizzare intervalli:
echo 'Linuxize' | tr 'a-z' 'A-Z'
Per convertire maiuscole in minuscole, è sufficiente cambiare le posizioni dei set.,
Rimuovere tutti i caratteri non numerici #
Il seguente comando rimuove tutti i caratteri non numerici:
echo "my phone is 123-456-7890" | tr -cd
sta per tutti i caratteri numerici, e utilizzando il
-c
opzione, il comando rimuove tutti i non-caratteri numerici.,sarà simile a questa:
1234567890
Mettere ogni parola in una nuova linea #
mettere ogni parola in una nuova riga, abbiamo bisogno non di caratteri alfanumerici e sostituirli con una nuova linea:
echo 'GNU is an operating system' | tr -cs '' '\n'
GNUisanoperatingsystem
Rimuovere le righe vuote #
Per eliminare le righe vuote semplicemente spremere il ripetitivo caratteri di nuova riga:
tr -s '\n' < file.txt > new_file.txt
Nel comando si utilizza il simbolo di reindirizzamento <
per passare il contenuto del tag file.txt
per il tr
comando., Il reindirizzamento>
scrive l’output del comando sunew_file.txt
.
Print directories PATH directories on a separate line #
La variabile ambientale$PATH
è 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 abbinare 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 la corrispondenza di pattern e la manipolazione di stringhe più complesse, è necessario utilizzare sed
oawk
.