Cum să utilizați comanda rev pe Linux

Comanda `rev` în Linux are rolul de a inversa ordinea caracterelor într-un șir de text. Aceasta poate fi aplicată direct textului introdus de utilizator sau conținutului unui fișier. Deși la prima vedere pare o comandă simplă, adevărata sa utilitate reiese atunci când este combinată cu alte comenzi.

Aplicația `rev` este un instrument Linux cu o funcționalitate aparent limitată: inversarea șirurilor. Dincolo de afișarea unui scurt ghid de utilizare cu opțiunea `-h` și a versiunii cu `-V`, nu oferă alte opțiuni în linia de comandă.

Deci, `rev` doar inversează șiruri? Fără flexibilitate? Răspunsul este parțial afirmativ și parțial negativ. Nu are opțiuni, dar potențialul său crește semnificativ prin combinarea cu alte comenzi. Acest ghid ilustrează modalitățile de a utiliza `rev` în combinații puternice.

Valoarea reală a lui `rev` se manifestă atunci când este utilizată ca element constitutiv în secvențe de comenzi mai complexe. Asemenea comenzilor `tac` și `yes`, `rev` este un facilitator, iar utilitatea sa devine evidentă prin modul în care simplifică utilizarea altor comenzi.

Utilizarea comenzii `rev`

Când este rulată fără parametri, `rev` preia intrarea tastată, o inversează și o afișează în terminal. Aceasta continuă până la apăsarea Ctrl+C.

rev

După ce introduceți text și apăsați Enter, `rev` va afișa șirul inversat, cu excepția cazului în care introduceți un palindrom.

Trimiterea textului către `rev`

Puteți utiliza `echo` pentru a transmite text la `rev`.

echo one two three | rev

De asemenea, `rev` poate inversa conținutul unui fișier text, rând cu rând. În acest exemplu, avem un fișier numit „filelist.txt” care conține o listă de nume de fișiere.

rev filelist.txt

Fiecare linie este preluată din fișier, inversată și apoi afișată în terminal.

Combinarea `rev` cu alte comenzi

Un exemplu este utilizarea conductei pentru a apela `rev` de două ori.

Această comandă elimină ultimul caracter al unui șir. Acest lucru poate fi util pentru eliminarea semnelor de punctuație. Folosim comanda `cut` pentru a elimina caracterul.

echo 'Remove punctuation.' | rev | cut -c 2- | rev

Analizând comanda pas cu pas:

`echo` trimite șirul către prima instanță a lui `rev`.
`rev` inversează șirul și îl trimite către `cut`.
Opțiunea `-c` (caractere) îi spune lui `cut` să returneze o secvență de caractere.
Opțiunea `2-` îi spune lui `cut` să returneze intervalul de caractere de la al doilea caracter până la sfârșitul șirului. Dacă am fi folosit `2-5`, intervalul ar fi fost de la al doilea la al cincilea caracter. Lipsa celui de-al doilea număr înseamnă „până la finalul șirului”.
Șirul inversat, minus primul caracter, este trimis către `rev`, care inversează șirul, readucându-l la forma inițială.

Prin eliminarea primului caracter al șirului inversat, am eliminat de fapt ultimul caracter al șirului original. Se poate face acest lucru cu `sed` sau `awk`, dar această sintaxă este mai simplă.

Separarea ultimului cuvânt

O metodă similară poate fi utilizată pentru a extrage ultimul cuvânt dintr-o linie.

Comanda este similară celei anterioare, utilizând `rev` de două ori. Diferența constă în modul în care comanda `cut` este folosită pentru a selecta porțiuni de text.

echo 'Separate the last word' | rev | cut -d' ' -f1 | rev

Descompunerea comenzii:

`echo` trimite șirul către prima instanță a lui `rev`.
`rev` inversează șirul și îl trimite către `cut`.
Opțiunea `-d’ ‘` (delimitator) îi spune lui `cut` să returneze o secvență de caractere delimitată de un spațiu.
Opțiunea `-f1` îi spune lui `cut` să returneze prima secțiune a șirului care nu conține delimitatorul. Cu alte cuvinte, prima parte a propoziției până la primul spațiu.
Primul cuvânt inversat este trimis către `rev`, care inversează șirul, aducându-l la forma inițială.

Deoarece am extras primul cuvânt din șirul inversat, am extras ultimul cuvânt al șirului original. Ultimul cuvânt al propoziției a fost „word”, și acesta este afișat.

Eliminarea conținutului din fișiere

Să presupunem că avem un fișier ce conține o listă de nume de fișiere, încadrate între ghilimele. Dorim să eliminăm ghilimelele din numele fișierelor.

Să vizualizăm fișierul:

less filelist.txt

Conținutul fișierului este afișat în `less`.

Putem elimina semnele de punctuație de la ambele capete ale fiecărei linii cu următoarea comandă, care folosește `rev` și `cut` de două ori:

rev filelist.txt | cut -c 2- | rev | cut -c 2-

Numele fișierelor sunt afișate fără ghilimele.

Descompunerea comenzii:

`rev` inversează liniile din fișier și le trimite către `cut`.
Opțiunea `-c` (caractere) îi spune lui `cut` să returneze o secvență de caractere.
Opțiunea `2-` îi spune lui `cut` să returneze intervalul de caractere de la al doilea caracter până la finalul fiecărei linii.
Șirurile inversate, minus primele lor caractere, sunt trimise către `rev`.
`rev` inversează șirurile, readucându-le la forma inițială. Acestea sunt din nou trimise către `cut`.
Opțiunea `-c` (caractere) îi spune lui `cut` să returneze o secvență de caractere din fiecare șir.
Opțiunea `2-` îi spune lui `cut` să returneze intervalul de caractere de la al doilea caracter până la finalul fiecărei linii. Aceasta „sare peste” ghilimelele, care sunt primul caracter al fiecărei linii.

Combinarea mai multor comenzi

Următoarea comandă returnează o listă sortată a extensiilor de fișiere din directorul curent, folosind cinci comenzi Linux distincte:

ls | rev | cut -d'.' -f1 | rev | sort | uniq

Procesul este următorul:

`ls` listează fișierele din directorul curent. Acestea sunt trimise către `rev`.
`rev` inversează numele fișierelor și le trimite către `cut`.
`cut` returnează prima porțiune a fiecărui nume de fișier până la un delimitator. `-d’.’` îi spune lui `cut` să folosească punctul „.” ca delimitator. Porțiunea de nume de fișiere inversate până la primul punct sunt extensiile de fișiere. Acestea sunt trimise către `rev`.
`rev` inversează extensiile fișierelor înapoi la ordinea inițială. Acestea sunt trimise către `sort`.
`sort` sortează extensiile de fișiere și trimite rezultatele către `uniq`.
`uniq` returnează o singură listă pentru fiecare tip de extensie unică de fișier. Dacă nu există o extensie (ex. pentru `makefile`, `Help` sau `gc_help`), se listează întregul nume al fișierului.

Pentru a oferi mai multă claritate, adăugați opțiunea `-c` (count) la comanda `uniq`.

ls | rev | cut -d'.' -f1 | rev | sort | uniq -c

Acum obținem o listă sortată a tipurilor de fișiere din directorul curent, cu un număr pentru fiecare.

O linie de comandă destul de ingenioasă!

Înapoi pentru a merge înainte

Uneori, pentru a progresa, este necesar să privim înapoi. De obicei, progresul cel mai rapid se obține lucrând în echipă.

Adăugați `rev` în setul vostru de comenzi și veți descoperi curând că simplifică secvențe de comenzi complicate.