Prezentare generală
în Linux, există o mulțime de utilitare de linie de comandă pentru manipularea textului la dispoziția noastră. În acest tutorial, vom discuta despre comanda tr.
Introducere în comanda tr
tr este prescurtarea de la”translate”. Este membru al pachetului GNU coreutils. Prin urmare, este disponibil în toate distros Linux.
comanda tr citește un flux de octeți de la intrarea standard (stdin), traduce sau șterge caractere, apoi scrie rezultatul la ieșirea standard (stdout).,
utilizarea sintaxa tr este destul de simplă:
tr SET1
Dacă nu vom trece de orice opțiuni pentru a tr, se va înlocui fiecare personaj în SET1 cu fiecare personaj în aceeași poziție în SET2.deoarece tr nu acceptă citirea directă a unui fișier, dacă dorim să îl aplicăm unui fișier text, trebuie să direcționăm conținutul fișierului către tr sau să redirecționăm fișierul către stdin.,
putem folosi tr a efectua text transformări cum ar fi:
- caracterul caz de conversie
- stoarcere repetarea caracterelor
- ștergeți caracterele specifice
- text de bază înlocuirea
Să mergem prin câteva exemple pentru a învăța cum să manipuleze text utilizează tr.
convertește litere mici în majuscule
vom începe cu o problemă de bază: convertirea tuturor caracterelor minuscule în majuscule într-un fișier.,
Să aruncăm o privire la modul de a rezolva problema utilizează tr comandă:
$ cat baeldung.urlwww.baeldung.com$ tr 'a-z' 'A-Z' < baeldung.urlWWW.BAELDUNG.COM
În exemplul de mai sus, am redirecționat-un fișier baeldung.url la stdin și a cerut tr să facă conversia cazului. Am folosit intervale de caractere atât în SET1, cât și în SET2 pentru a face conversia cazului.
în mod Alternativ, putem, de asemenea, rezolva problema folosind o pereche de built-in set de caractere pseudonime:
$ tr '' '' < baeldung.url WWW.BAELDUNG.COM
Pentru tr va scrie doar rezultatul la stdout, după executarea acesteia, baeldung.fișierul url nu este modificat., Dacă vrem tradus rezultatul sa fie scris înapoi la fișierul de intrare, putem redirecționa stdout într-un fișier temporar și apoi redenumiți și suprascrie fișierul de intrare:
$ tr 'a-z' 'A-Z' < baeldung.url >tmp.txt && mv tmp.txt baeldung.url $ cat baeldung.urlWWW.BAELDUNG.COM
de Bază Găsi și Înlocui
tr utilitate este la îndemână pentru un simplu „găsește și înlocuiește” operațiuni în cazul în care un singur personaj ar trebui să fie înlocuit cu un alt. De exemplu, să înlocuim toate cratimele cu subliniere într-un fișier:
$ cat env.txt$JAVA-HOME and $MAVEN-HOME are system variables.$ cat env.txt | tr '-' '_'$JAVA_HOME and $MAVEN_HOME are system variables.
în loc să folosim redirecționarea, am folosit comanda cat pentru a conduce conținutul fișierului env.txt la tr.,pe lângă găsirea și înlocuirea unui singur caracter, tr poate face și înlocuirea mai multor caractere. Să vedem un alt exemplu de traducere bretele în paranteză:
$ echo "{baeldung}" | tr '{}' '()'(baeldung)
putem folosi, de asemenea, tr sa fac caracter gama de traducere., mesaj”) utilizează tr:
În acest exemplu, vom folosi simplu cifru Cezar nostru algoritm de criptare: înlocuiți fiecare literă din textul de intrare printr-o scrisoare un număr fix de poziții alfabetului — de exemplu, schimbarea „o” în „e”, schimbarea „b” în „f „, și așa mai departe:
$ echo "this is a secret message" | tr 'a-z' 'e-zabcd' > secret.txt$ cat secret.txtxlmw mw e wigvix qiwweki
Pentru a decripta fișierul secret, facem schimb de SET1 și SET2 în tr comanda de mai sus:
$ tr 'e-zabcd' 'a-z' < secret.txt this is a secret message
Trunchia un Model de Căutare
Dacă examinăm exemplele din secțiunea anterioară, observăm că SET1 și SET2 am trecut de la tr a avut întotdeauna aceeași lungime.,
Să vedem ce tr ne va da dacă SET2 este mai scurtă decât SET1:
$ echo "abcdefg" | tr 'abcdefg' 'ABC'ABCCCCC
Când SET2 este mai scurtă decât SET1, tr comandă, în mod implicit, se repetă ultimul caracter de SET2. Prin urmare, vedem în ieșirea de mai sus, ultima literă din SET2, care este un „C”, se repetă pentru a se potrivi cu literele de la „d” la „g”. Deci comanda se transformă în tr ‘abcdefg’ ‘ABCCCCC’.,
putem folosi trunchia opțiunea „-t” pentru a schimba acest comportament implicit, să tr limita de potrivire cu lungimea de SET2:
$ echo "abcdefg" | tr -t 'abcdefg' 'ABC' ABCdefg
Stoarce Repetarea Caracterelor
putem elimina cazuri repetate de un personaj utilizează tr cu stoarce opțiunea „-s”.
Să vedem un exemplu de conversie multiple continue spații pentru un singur spațiu:
$ echo 'Hi, nice to meet you!' | tr -s ' ' Hi, nice to meet you!
Dacă vom trece opțiunea-s împreună cu SET1 și SET2 la tr, prima dată se va face traducerea, apoi stoarce caractere repetate în SET2., De exemplu:
$ echo 'TODAYYYY IIIS SOOO COOOLD ~' | tr -s 'A-Z' 'a-z' today is so cold ~
ștergeți caracterele specifice
putem trece opțiunea”- d ” la tr pentru a șterge caracterele din SET1.
nu ca opțiunea „-s”, Când trecem”- d ” împreună cu SET1 și SET2 la tr, SET2 va fi ignorat și nu se va face nicio traducere.de exemplu, dorim să ștergem toate literele minuscule din textul de intrare:
$ echo "A a B b C c" | tr -d 'a-z'A B C
căutați complementul SET1
putem trece opțiunea „-c” la tr, pentru a o face să caute un complement de SET1., Căutarea complementului SET1 înseamnă căutarea inversului SET1.uneori, această opțiune poate simplifica definiția SET1.de exemplu, am dori să potrivim orice caracter care nu este o literă mică și să-l traducem în spațiu alb:
$ echo "#aMvery~handy tool" | tr -c 'a-z' ' 'tr is a very handy tool
de asemenea, putem combina opțiunea „- c” cu „- d” sau „- s”. Următorul exemplu arată cum putem extrage numărul de identificare de la client.fișier csv:
în exemplul de mai sus, trebuie să includem caracterul newline (\n) în SET1., În caz contrar, toate pauzele de linie din fișierul de intrare vor fi șterse și vom avea toate numerele de identificare concatenate împreună într-o singură linie. Nu asta vrem.
concluzie
în acest articol, am învățat cum să folosim comanda tr prin diferite exemple.
comanda tr este o alegere bună dacă trebuie să facem o transformare fundamentală a textului, cum ar fi conversia cazurilor sau stoarcerea caracterelor repetitive.cu toate acestea, dacă ne confruntăm cu probleme complexe de procesare a textului, ar trebui să ne gândim la utilități mai puternice precum awk sau sed.