Comanda Linux `look` analizează un fișier și afișează toate liniile care debutează cu un anumit cuvânt sau secvență de caractere. Totuși, trebuie reținut că funcționalitatea sa poate diferi între diversele distribuții Linux. Acest ghid îți va arăta cum să o folosești eficient.
Diferențele de funcționare ale comenzii `look` în Ubuntu
În timpul cercetării pentru acest articol, m-am confruntat cu anumite dificultăți legate de comanda `look`, o comandă aparent simplă, dar utilă. Au apărut două probleme majore: compatibilitatea și documentația.
Am testat comanda `look` pe distribuțiile Ubuntu, Fedora și Manjaro. Comanda era prezentă în toate, ceea ce este un lucru bun. Totuși, modul în care funcționa nu era identic pe fiecare distribuție. Versiunea din Ubuntu era semnificativ diferită. Conform paginilor de manual Ubuntu, comportamentul ar trebui să fie similar.
În cele din urmă, am descoperit cauza. Comanda `look` folosește în mod tradițional un algoritm de căutare binară, în timp ce versiunea din Ubuntu utilizează un algoritm de căutare liniară. Paginile de manual online pentru Ubuntu Bionic Beaver (18.04), Cosmic Cuttlefish (18.10) și Disco Dingo (19.04) precizează că versiunea Ubuntu folosește o căutare binară, ceea ce nu este corect.
Consultând pagina de manual locală a Ubuntu, se poate observa că versiunea lor folosește o căutare liniară. Există o opțiune de linie de comandă pentru a forța folosirea căutării binare. Versiunile din celelalte distribuții nu au o astfel de opțiune.
man look
Parcurgând pagina de manual, se poate vedea secțiunea care explică faptul că această versiune de `look` folosește o căutare liniară în loc de cea binară.
Morala acestei povești este să consulți întotdeauna paginile de manual locale.
Căutare liniară versus căutare binară
Algoritmul de căutare binară este mai rapid și mai eficient decât cel liniar. Acest lucru devine evident atunci când se lucrează cu fișiere mari. Dezavantajul căutării binare este că fișierul trebuie să fie sortat. Dacă nu dorești să sortezi fișierul original, sortează o copie și lucrează cu aceasta folosind `look`.
Vom demonstra acest lucru mai târziu. Reține că pe Fedora, Manjaro și probabil pe majoritatea distribuțiilor Linux, va trebui să creezi o copie sortată a fișierului și să lucrezi cu ea.
Instalarea dicționarului
Comanda `look` poate funcționa cu orice fișier text sau cu fișierul de dicționar local „words”.
Pe Manjaro, trebuie să instalezi fișierul „words”. Folosește această comandă:
sudo pacman -Syu words
Cum se utilizează `look`
Pentru acest articol, vom folosi un fișier text cu poezia „The Jumblies” de Edward Lear.
Să vedem conținutul său folosind această comandă:
less the-jumblies.txt
Iată prima parte a poeziei. Reține că folosim Ubuntu, deci fișierul nu este sortat. Pe Fedora și Manjaro, ar trebui să lucrăm cu o copie sortată, lucru pe care îl vom discuta mai târziu.
Dacă căutăm linii care încep cu cuvântul „They”, vom afla mai multe despre ce au făcut Jumblyes.
look They the-jumblies.txt
Comanda `look` afișează următoarele linii:
Ignorarea majusculelor
Pentru a face ca `look` să ignore diferențele dintre literele mari și mici, folosește opțiunea `-f` (ignore case). Am folosit din nou „they” ca termen de căutare, dar de data aceasta scris cu litere mici.
look -f they the-jumblies.txt
De data aceasta, rezultatele includ o linie suplimentară.
Linia care începe cu „THEY” a fost omisă în rezultatele anterioare deoarece este scrisă cu majuscule și nu se potrivea cu termenul de căutare „they”.
Ignorând majusculele, comanda `look` o include în rezultate.
Utilizarea `look` cu un fișier sortat
Dacă distribuția ta Linux are o versiune de `look` care funcționează în mod tradițional folosind căutarea binară, va trebui să sortezi fișierul sau să lucrezi cu o copie sortată.
Să repetăm comanda pentru a căuta „They”, de data aceasta pe Manjaro.
După cum vezi, nu au fost returnate rezultate. Totuși, știm că există versuri în poezie care încep cu cuvântul „They”.
Să creăm o copie sortată a fișierului. Dacă vrei să folosești opțiunile `-f` (ignore case) sau `-d` (doar caractere alfanumerice și spații) cu `look`, va trebui să le folosești și atunci când sortezi fișierul.
Opțiunea `-o` (output) îți permite să specifici numele fișierului în care să se adauge liniile sortate. În acest exemplu, este „sorted.txt”.
sort -f -d the-jumblies.txt -o sorted.txt
Să folosim `look` pe fișierul sorted.txt și să utilizăm opțiunile `-f` și `-d`.
Acum obținem rezultatele așteptate.
Luarea în considerare doar a spațiilor și caracterelor alfanumerice
Pentru a face ca `look` să ignore tot ce nu este un caracter alfanumeric sau un spațiu, folosește opțiunea `-d` (alphanumeric).
Să vedem dacă există cuvinte care încep cu „Oh”.
look -f oh the-jumblies.txt
Comanda `look` nu returnează niciun rezultat.
Să încercăm din nou și să îi spunem lui `look` să ignore tot ce nu este un caracter alfanumeric sau un spațiu. Astfel, caracterele și simbolurile precum semnele de punctuație vor fi ignorate.
look -f -d oh the-jumblies.txt
De data aceasta, obținem un rezultat. Nu am găsit această linie înainte, deoarece ghilimelele și semnul exclamării au interferat cu căutarea.
Specificarea caracterului de final
Poți specifica pentru `look` să folosească un anumit caracter ca delimitator. În mod obișnuit, spațiile și sfârșitul liniilor sunt folosite ca delimitatori.
Opțiunea `-t` (terminating character) ne permite să specificăm caracterul dorit. În acest exemplu, vom folosi caracterul apostrof. Trebuie să îl includem într-un șir, precedat de un backslash, astfel încât comanda `look` să știe că nu deschidem un șir.
Includem termenul de căutare între ghilimele, deoarece conține un spațiu. Căutăm două cuvinte.
look -f -t \' "they call" the-jumblies.txt
Rezultatele corespund termenului de căutare, delimitat de apostroful pe care l-am specificat ca caracter de final.
Utilizarea `look` fără un fișier
Dacă nu specifici un nume de fișier în linia de comandă, comanda `look` va utiliza fișierul „words”.
Comanda:
va afișa următoarele rezultate:
Acestea sunt toate cuvintele din fișier care încep cu cuvântul „circle”.
Concluzie
Asta e tot ce trebuie să știi despre comanda `look`.
Este destul de simplu odată ce înțelegi că există diferențe de funcționare în funcție de distribuția Linux și că versiunea ta folosește o căutare binară sau liniară.