Il comando tr in Linux traduce un set di caratteri in un altro. Può sostituire un carattere o un insieme di caratteri con un altro carattere o insieme di caratteri. tr legge l'input dallo standard input e visualizza l'output sullo standard output. L'input può anche essere dato in un file o usando il comando echo.
tr è l'abbreviazione di tradurre .
Il formato standard per il comando tr è:
$ tr [option] [char_set 1] [char_set 2]
In base alle opzioni specificate, il comando tr sostituisce l'insieme di caratteri in "set 1" con "set 2".
Sostituzione dei caratteri
Per sostituire i caratteri usando il comando tr è sufficiente menzionare i caratteri da sostituire nel 1° set e i caratteri che devono essere messi al loro posto dopo la sostituzione nel 2° set.
$ tr 'a' '1'
Questo comando attenderà l'input da STDIN. Dopo aver ottenuto l'input, l'output sullo schermo apparirà con tutte le istanze di "a" sostituite da "1".
1. Usare echo con il comando tr
L'esempio sopra legge l'input da STDIN. Il comando Echo può fornire input insieme al comando tr. Utilizzare l'operatore Pipe(|) per eseguire i comandi insieme.
$ echo "apples and bananas" | tr 'a' '1'
2. Prendere input da un file
tr può anche prendere il suo input da un file. Ciò è utile quando la traduzione deve essere eseguita su una raccolta voluminosa di testo. L'operatore di reindirizzamento (<) viene utilizzato per fornire input da un file.
$ tr 'a' '1' < input.txt
input.txt contiene lo stesso testo dell'esempio sopra.
Per salvare il testo in un file, utilizzare l'operatore di reindirizzamento(>) per reindirizzare l'output a un file.
$ tr 'a' '1' < input.txt > output.txt
Cambiare il caso del testo con il comando tr
Uno degli usi più comuni del comando tr è tradurre il testo da minuscolo a maiuscolo o viceversa.
Poiché tr funziona su insiemi di caratteri, possiamo menzionare esplicitamente l'insieme di caratteri minuscoli come set 1 e l'insieme di caratteri maiuscoli come set 2 per effettuare il passaggio.
$ echo "apples and bananas" | tr a-z A-Z
Imposta a-z rappresenta l'insieme di lettere minuscole e l'insieme A-Z rappresenta l'insieme di lettere maiuscole.
Un altro modo per fare lo stesso è :
$ echo "apples and bananas" | tr [:lower:] [:upper:]
Qui, [:lower:] rappresenta l'insieme di alfabeti minuscoli e [:upper:] rappresenta l'insieme degli alfabeti maiuscoli.
Eliminazione di caratteri con tr
tr ha la capacità di eliminare una serie di caratteri dal testo. Ciò si ottiene utilizzando tr insieme a -d comando.
$ echo "apples and bananas" | tr -d 'n'
Questo comando eliminerà tutte le occorrenze di 'n' nel testo.
Per rimuovere le occorrenze di più caratteri, menziona tutti i caratteri tra virgolette singole.
$ echo "apples and bananas" | tr -d 'na'
Questo comando rimuoverà le occorrenze di 'n' e 'a'
Poiché tr funziona a livello di personaggio, tutte le singole occorrenze di 'n' e 'a' vengono rimossi. È facile sbagliarsi e pensare che il comando rimuoverà solo le occorrenze di 'na' che si verificano in quella sequenza. Tuttavia, non è così.
Comprime più occorrenze in una
Comprimere più occorrenze in una può essere utile per comprimere il testo. Viene spesso utilizzato per rimuovere istanze di più spazi tra le righe.
-s l'opzione è usata con tr per spremere.
$ echo "apples and bananas" | tr -s 'p'
Più occorrenze di "p" in apple sono state ridotte a una singola occorrenza.
$ echo "apples and bananas" | tr -s 'na' '1'
L'output di questo comando è equivalente a quello della prima sostituzione delle occorrenze dei caratteri 'n' e 'a ' con '1' , seguita da un'operazione di compressione. Per confrontare guarda il secondo comando nell'output. Il risultato del secondo comando è la semplice sostituzione dei caratteri.
Spremiamo tutti gli 1 nell'output del secondo comando per vedere se otteniamo lo stesso output del primo.
Otteniamo lo stesso output del primo comando nell'output.
Per rimuovere gli spazi bianchi consecutivi nel testo usa :
$ echo "apples and bananas" | tr -s " "
In alternativa [:spazio:] può essere utilizzato al posto di ” “
$ echo "apples and bananas" | tr -s [:space:]
Estrazione di cifre dal testo
Per realizzare operazioni in cui è necessario preservare solo un particolare insieme di caratteri. È meglio usare -c opzione. -c viene utilizzato per completare l'insieme.
Complemento di un insieme significa tutto il resto diverso da quello che c'è in quell'insieme.
$ echo " Home : 011 1234 4321" | tr -cd [:digit:],'\n'
Menzionando '\n' (nuova riga) è importante perché altrimenti l'output non ha una nuova riga e si confonde con la riga successiva nel terminale. Un altro motivo per non ignorare le nuove righe durante l'eliminazione dei caratteri è che il file potrebbe avere più cifre in più righe. Se il carattere di nuova riga viene eliminato, tutti i numeri verranno visualizzati insieme senza spazio.
Estrarre parole dal testo
Questo processo è l'esatto opposto di quello eseguito sopra. Qui ignoreremo le cifre e ci concentreremo solo sulle parole composte da lettere.
$ echo " Home : 011 1234 4321" | tr -d [:digit:]
In questo esempio abbiamo semplicemente cancellato tutte le cifre dal testo.
Un modo più controllato per fare lo stesso sarebbe attraverso il complemento.
$ echo " Home : 011 1234 4321" | tr -cd [:alpha:],'\n'
[:alfa:] rappresenta l'insieme degli alfabeti. Pensala come una raccolta dei due set, inferiore e superiore.
[:alpha:] = [:lower:] + [:upper:]
Conteggio del numero di occorrenze di parole
Contare quante volte una parola compare in un testo può essere utile per costruire istogrammi. È anche molto utile nella creazione di modelli probabilistici per il rilevamento dello spam e-mail.
Per prima cosa, creiamo un file con alcune parole ricorrenti.
A volte può essere utile visualizzare ogni parola del testo in una nuova riga.
$ tr -cs "[:alpha:]" "\n" < input.txt
Per ottenere il numero di occorrenze per ogni parola usa:
$ tr -cs "[:alpha:]" "\n" < input.txt | sort | uniq -c
Ordina viene utilizzato per ordinare l'elenco in modo lessicografico. uniq -c conta le singole occorrenze di ogni parola e restituisce il risultato come un elenco di parole con un conteggio.
Conclusione
Il comando tr è utile per eseguire traduzioni basate sui caratteri. Se combinato con altri comandi come sort o uniq, il comando tr può rivelarsi molto potente. Leggi di più sul comando tr nella sua pagina man. Quando si applicano trasformazioni su un'intera riga, è possibile utilizzare il comando sed.