Cum să utilizați comanda Linux tr

Publicat: 2023-05-17
Ecran de pornire Ubuntu Linux pe un laptop
Jordan Gloor / How-To Geek
Comanda tr efectuează transformări pe un flux de text, producând un nou flux ca rezultat. Puteți înlocui, șterge sau converti caractere conform regulilor pe care le-ați stabilit pe linia de comandă.

Aveți nevoie de o metodă simplă pentru a manipula un flux de text în Linux? Nu căutați mai departe decât comanda tr, care vă poate economisi timp la înlocuirea, eliminarea, combinarea și comprimarea textului introdus. Așa se face.

Cuprins

Ce este comanda tr?
Înlocuirea personajelor
Folosind intervale și jetoane
Inversarea meciurilor
Ștergerea și stoarcerea caracterelor
Ștergerea Caracterelor
Combinarea și împărțirea liniilor
Utilizarea tr cu țevi
Simplul este la fel de simplu

Ce este comanda tr?

Comanda Linux tr este un utilitar rapid și simplu pentru a elimina caracterele nedorite din fluxurile de text și pentru alte trucuri de manipulare. Își ia numele de la cuvântul „traduce”, iar rădăcinile lui tr sunt adânci în tradiția Unix.

După cum știm cu toții, Linux este o rescrie open-source a Unix. Își adaugă propriile lucruri în amestec. Nu este o clonă octet pentru octet, dar în mod clar ia o mare parte din principiile de proiectare și conducerea inginerească de la sistemul de operare Unix.

Deși până acum doar două distribuții Linux au fost certificate ca fiind compatibile POSIX și marcate ca fiind acceptate oficial ca implementări ale Unix – EulerOS și Inspur K-UX – Linux a înlocuit aproape complet Unix în lumea afacerilor.

Toate distribuțiile Linux, cel puțin în utilitățile lor de bază, aderă la filozofia Unix. Filosofia Unix încapsulează viziunea pe care pionierii Unix au avut-o pentru noul lor sistem de operare. Este adesea parafrazată ca fiind „Scrieți programe care fac un lucru bine”. Dar este mai mult decât atât.

Una dintre cele mai puternice inovații a fost că programele ar trebui să genereze rezultate care ar putea fi utilizate ca intrare pentru alte programe. Capacitatea de a conecta utilitățile liniei de comandă împreună, folosind fluxul de ieșire dintr-un program ca flux de intrare la următorul program din linie, este enorm de puternică.

Uneori, veți dori să reglați fin sau să modificați rezultatul unui program înainte de a ajunge la următorul program din linie. Sau poate nu vă preluați contribuția de la un instrument de linie de comandă Linux, transmiteți text dintr-un fișier care nu a fost creat având în vedere nevoile dvs. particulare.

Acesta este locul în care tr vine în sine. Vă permite să efectuați un set de transformări simple pe fluxul său de intrare, pentru a produce fluxul său de ieșire. Acest flux de ieșire poate fi redirecționat într-un fișier, alimentat într-un alt program Linux sau chiar într-o altă instanță a tr pentru a avea mai multe transformări aplicate fluxului.

Înlocuirea personajelor

Comanda tr operează pe fluxul său de intrare conform regulilor. Folosit fără opțiuni de linie de comandă, acțiunea implicită a tr este de a înlocui caracterele din fluxul de intrare cu alte caractere.

Comenzile pentru tr necesită de obicei două seturi de caractere. Primul set conține caracterele care vor fi înlocuite dacă sunt găsite în fluxul de intrare. Al doilea set conține caracterele cu care vor fi înlocuite.

Modul în care funcționează este că aparițiile primului caracter din setul unu vor fi înlocuite cu primul caracter din setul doi. Aparițiile celui de-al doilea caracter din setul unu vor fi înlocuite cu al doilea caracter din setul doi și așa mai departe.

Acest exemplu va căuta litera „c” în fluxul de intrare la tr și va înlocui fiecare apariție cu litera „z”. Rețineți că tr face distincție între majuscule și minuscule.

Folosim echo pentru a împinge un text în tr .

 echo abcdefabc | tr 'c' 'z' 

Înlocuirea unui singur caracter cu tr

Toate aparițiile lui „c” sunt înlocuite cu „z” și noul șir este scris în fereastra terminalului.

De data aceasta vom căuta două litere, „a” și „c”. Rețineți că nu căutăm „ac”. Căutăm „a”, apoi căutăm „c”. Vom înlocui orice apariție a lui „a” cu „x” și orice apariție a lui „c” cu „z”.

 echo abcdefabc | tr 'ac' 'xz' 

Eliminarea a două litere cu tr

Pentru ca acest lucru să funcționeze, trebuie să aveți același număr de caractere în ambele seturi. Dacă nu o faci, vei avea un comportament previzibil, dar probabil nedorit.

 ecou „spune-mi Ismael”. | tr 'abcdjklm' '123' 

Folosind seturi de caractere dezechilibrate cu tr

Există mai multe personaje în setul unu decât în ​​setul doi. Literele „d” la „m” nu au niciun caracter corespunzător în setul doi. Vor fi în continuare înlocuite, dar toate sunt înlocuite cu ultimul caracter din setul doi.

Este posibil ca acest lucru să fie util în unele cazuri, dar dacă doriți să preveniți acest lucru, puteți utiliza opțiunea -t (truncare). Aceasta înlocuiește doar acele caractere conținute în setul unu care au un caracter care se potrivește în setul doi.

 ecou „spune-mi Ismael”. | tr -t 'abcdjklm' '123' 

Utilizarea seturi de caractere dezechilibrate cu tr cu opțiunea truncare

Folosind intervale și jetoane

Setul unu și setul doi pot conține intervale de caractere. De exemplu, [az] reprezintă toate literele mici, iar [AZ] reprezintă toate literele mari. Putem folosi acest lucru pentru a schimba cazul unui flux de text.

Aceasta va converti fluxul de intrare în majuscule.

 echo „Cum să facem un geek” | tr '[az]' '[AZ]' 

Utilizarea intervalelor de caractere pentru a converti un șir în majuscule

Pentru a inversa cazul în cealaltă direcție, putem folosi aceeași comandă, dar cu majuscule și minuscule schimbate pe linia de comandă.

 echo „Cum să facem un geek” | tr '[AZ]' '[az]' 

Utilizarea intervalelor de caractere pentru a converti un șir în litere mici

Există token-uri pe care le putem folosi pentru unele dintre cazurile comune cu care am putea dori să le potrivim.

  • [:alnum:] : Litere și cifre.
  • [:alpha:] : numai litere.
  • [:digit:] : Numai cifre.
  • [:blank:] : file și spații.
  • [:space:] : toate spațiile albe, inclusiv caracterele de linie nouă.
  • [:graph:] : Toate caracterele, inclusiv simbolurile, dar nu spațiile.
  • [:print:] : Toate caracterele, inclusiv simbolurile, inclusiv spațiile.
  • [:punct:] : Toate caracterele de punctuație.
  • [:lower:] : Litere mici.
  • [:upper:] : Litere mari.

Ne putem efectua conversiile minuscule în majuscule și majuscule în minuscule la fel de ușor, folosind token-uri.

 echo „Cum să facem un geek” | tr '[:lower:]' '[:upper:]'
 echo „Cum să facem un geek” | tr '[:upper:]' '[:lower:]' 

Folosind jetoane pentru a schimba majusculele șirurilor de text

Inversarea meciurilor

Opțiunea -c (complement) se potrivește cu toate caracterele, cu excepția celor din primul set. Această comandă convertește totul în afară de litera „c” într-o cratimă „ - “.

 echo abcdefc | tr -c 'c' '-' 

Înlocuirea tuturor, cu excepția caracterelor specificate, cu alte caractere

Această comandă adaugă litera „a” la primul set. Orice altceva în afară de „a” sau „c” este convertit într-un caracter „ - „.

 echo abcdefc | tr -c 'ac' '-' 

Înlocuirea tuturor, cu excepția caracterelor multiple specificate, cu alte caractere

Ștergerea și stoarcerea caracterelor

Putem folosi tr pentru a elimina caracterele cu totul, fără nicio înlocuire.

Această comandă folosește opțiunea -d (ștergere) pentru a elimina orice apariție a „a”, „d” sau „f” din fluxul de intrare.

 echo abcdefc | tr -d 'adf' 

Ștergerea mai multor caractere dintr-un șir de text cu tr

Acesta este un caz în care avem doar un set de caractere pe linia de comandă, nu două.

Un altul este atunci când folosim opțiunea -s (strângere-repetă). Această opțiune reduce caracterele repetate la un singur caracter.

Acest exemplu va reduce secvențele repetate ale caracterului spațiu la un singur spațiu.

 echo "abc de fc" | tr -s „[:blank:]” 

Schimbarea secvențelor repetate de caractere într-o singură apariție a caracterului, cu tr

Este puțin confuz faptul că simbolul [:blank:] reprezintă caracterul spațiu, iar simbolul [:space:] reprezintă toate formele de spațiu alb, inclusiv tabulatorii și caracterele newline.

În acest caz, am putea înlocui [:blank:] cu [:space:] și obținem același rezultat.

 echo "abc de fc" | tr -s „[:spațiu:]” 

Schimbarea secvențelor repetate de caractere într-o singură apariție a caracterului, cu tr

Ștergerea Caracterelor

Diferențele dintre [:blank:] și [:space:] devin evidente atunci când ștergem caractere. Pentru a face acest lucru, folosim opțiunea -d (șterge) și oferim un set de caractere pe care tr le va căuta în fluxul său de intrare. Orice găsește este eliminat.

 echo "abc de fc" | tr -d '[:blank:]' 

Ștergerea spațiilor libere (caractere de spațiu) dintr-un șir de text, cu tr

Spațiile sunt șterse. Rețineți că obținem o linie nouă după ce fluxul de ieșire este scris în fereastra terminalului. Dacă repetăm ​​acea comandă și folosim [:space:] în loc de gol, vom obține un rezultat diferit.

 echo "abc de fc" | tr -d '[:blank:]' 

Ștergerea spațiului alb dintr-un șir de text, cu tr

De data aceasta, nu începem o linie nouă după ieșire, promptul de comandă este îndreptat direct împotriva ei. Acest lucru se datorează faptului că [:space:] include linii noi. Orice spații, tabulatori și caractere de linie nouă sunt eliminate din fluxul de intrare.

Desigur, puteți folosi și un caracter spațiu real.

 echo "abc de fc" | tr -d ' ' 

Ștergerea spațiilor dintr-un șir de text, prin specificarea unui caracter spațiu, cu tr

La fel de ușor putem șterge cifre.

 echo abcd123efg | tr -d '[:cifra:]' 

Ștergerea cifrelor dintr-un șir de text cu tr

Combinând opțiunile -c (complement) și -d (șterge), putem șterge totul în afară de cifre.

 echo abcd123efg | tr -cd „[:digit:]” 

Ștergerea tuturor, cu excepția cifrelor dintr-un șir de text folosind tr

Rețineți că totul, în afară de cifre, înseamnă toate literele și toate spațiile albe, așa că încă o dată pierdem linia nouă de sfârșit.

Combinarea și împărțirea liniilor

Dacă înlocuim spații cu caractere newline, putem împărți o linie de text și plasăm fiecare cuvânt pe propria linie.

 ecou 'unu doi trei patru' | tr ' ' '\n' 

Împărțirea unei linii de text într-un cuvânt pe linie, cu tr

Putem schimba și delimitatorul care separă cuvintele. Această comandă înlocuiește două puncte ” : ” cu spații.

 ecou 'unu doi trei patru' | tr ' ' ':' 

Schimbarea delimitatorului de cuvinte din spații în două puncte, cu tr

Putem găsi orice delimitator este în uz și îl putem înlocui cu caractere newline, împărțind textul dificil de citit în ieșire mai ușor de gestionat.

Variabila de mediu cale este un șir lung de mai multe căi de director. Un două puncte ” : ” separă fiecare cale. Le vom schimba în caractere newline.

 echo $PATH
 echo $PATH | tr ":" "\n" 

Împărțirea variabilei de mediu $PATH în căi de directoare separate, una pe linie, cu tr

Este mult mai ușor de analizat vizual.

Dacă avem rezultate pe care dorim să o reformatăm într-o singură linie, putem face și asta. Fișierul „lines.txt” conține ceva text, cu câte un cuvânt pe fiecare linie. Îl vom introduce în tr și îl vom converti într-o singură linie.

 fișiere pisici.txt
 linii de pisică.txt | tr '\n' ' ' 

Combinarea intrării pe mai multe linii într-o singură linie de text, folosind tr

Utilizarea tr cu țevi

Putem folosi ieșirea de la tr ca intrare pentru alt program sau chiar pentru tr în sine.

Această comandă folosește tr de patru ori.

  • Primul tr șterge orice cratime „-” din intrare.
  • Al doilea tr stoarce orice spații repetate în spații unice.
  • Al treilea tr înlocuiește spațiile cu caractere de subliniere „_”.
  • Al patrulea și ultimul tr convertește șirul în litere mici.
 echo „Fișier deformat-nAMe.txt” | tr -d '-' | tr -s ' ' | tr ' ' '_' | tr '[:upper:]' '[:lower:]' 

O conductă de patru cazuri de tr

LEGATE: Cum să utilizați pipe pe Linux

Simplu este la fel de simplu

Comanda tr este grozavă pentru că este simplă. Nu sunt multe de învățat și de reținut. Dar simplitatea ei poate fi și căderea ei.

Nu vă înșelați, deseori veți descoperi că tr vă permite să faceți ceea ce aveți nevoie fără a fi nevoie să apelați la instrumente mai complicate precum sed .

Cum să utilizați comanda sed pe Linux
LEGATE Cum să utilizați comanda sed pe Linux

Cu toate acestea, dacă te străduiești să faci ceva cu tr și te trezești că construiești lanțuri lungi de comenzi, probabil că ar trebui să folosești sed .