grep

Găsirea șirurilor în fișiere text folosind grep cu expresie regulată

Găsirea șirurilor în fișiere text folosind grep cu expresie regulată
grep este unul dintre cele mai populare instrumente pentru căutarea și găsirea șirurilor într-un fișier text. Denumirea „grep” derivă dintr-o comandă în instrumentul de editare a liniei ed Unix, acum învechit - comanda ed pentru căutare la nivel global printr-un fișier pentru un expresie uzuala și apoi tipărire acele linii erau g / re / p, unde re era expresia regulată pe care ați folosi-o. În cele din urmă, comanda grep a fost scrisă pentru a face această căutare într-un fișier atunci când nu se utilizează ed.

În acest articol, vă arătăm să rulați în avans căutarea șirurilor folosind Grep cu expresie regulată, oferindu-vă 10 exemple practice despre implementările sale. Multe exemple discutate în acest articol au implicații practice, ceea ce înseamnă că le puteți folosi în programarea zilnică Linux. Următoarele exemple descriu câteva exemple de regexp pentru modele căutate în mod obișnuit.

Ex 1: Găsiți un singur Charterer într-un fișier text

Pentru a afișa liniile din fișierul „carte” care conțin un caracter „$”, tastați:

$ grep '\ $' carte

Ex 2: Găsiți un singur șir într-un fișier text

Pentru a afișa linii în fișierul „carte” care conține șirul „14 USD”.99 ', tastați:

$ grep '\ $ 14 \.Cartea de 99 '

Ex 3: Găsiți un singur navlositor special într-un fișier text

Pentru a afișa liniile din fișierul „carte” care conțin un caracter „\”, tastați:

$ grep '\\' carte

Ex 4: potrivirea liniilor începând cu anumite texte

Utilizați „ˆ” într-o regexp pentru a indica începutul unei linii.

Pentru a afișa toate liniile în '/ usr / dict / cuvinte' începând cu 'pro', tastați:

$ grep 'ˆpro' / usr / dict / words

Pentru a afișa toate liniile din fișierul „carte” care încep cu textul „la început”, indiferent de caz, tastați:

$ grep -i 'ˆîn începutul' carte

NOTĂ: Aceste regexps au fost citate cu „caractere; acest lucru se datorează faptului că unele cochilii tratează altfel caracterul „ˆ” ca pe un „metacaracter” special

Pe lângă căutările de cuvinte și fraze, puteți utiliza grep pentru a căuta modele de text complexe numite expresii regulate. O expresie obișnuită - sau „regexp” - este un șir text de caractere speciale care specifică un a stabilit de tipare pe măsură.

Din punct de vedere tehnic, modelele de cuvinte sau fraze sunt expresii regulate - doar foarte simple. Într-o expresie regulată, majoritatea personajelor - inclusiv litere și cifre - se reprezintă pe sine. De exemplu, modelul regexp 1 se potrivește cu șirul „1” și cu modelul băiat se potrivește cu șirul „băiat”.

Există o serie de caractere rezervate numite metacaractere care nu se reprezintă într-o expresie regulată, dar au o semnificație specială care este utilizată pentru a construi modele complexe. Aceste metacaractere sunt după cum urmează: ., *, [, ], ˆ, $ și \. Este bine să rețineți că astfel de metacaractere sunt frecvente în aproape toate distribuțiile Linux comune și speciale. Iată un articol bun care acoperă semnificațiile speciale ale metacaracterelor și oferă exemple de utilizare a acestora.

Ex 5: potrivirea liniilor care se termină cu anumite texte

Folosiți „$” ca ultim caracter al textului citat pentru a se potrivi cu textul respectiv doar la sfârșitul unui rând. Pentru a ieși linii în fișierul „merge” care se termină cu un punct de exclamare, tastați:

$ grep '!$ 'merge

Ex 6: potrivirea liniilor de o anumită lungime

Pentru a potrivi liniile de o anumită lungime, utilizați acel număr de „.„caractere între„ ˆ ”și„ $ ”- de exemplu, pentru a se potrivi cu toate liniile care au două caractere (sau coloane) lățime, utilizați„ ˆ… $ ”ca regexp pentru a căuta.

Pentru a afișa toate liniile din „/ usr / dict / words” care au exact trei caractere lățime, tastați:

$ grep 'ˆ ... $' / usr / dict / words

Pentru linii mai lungi, este mai util să folosiți o construcție diferită: 'ˆ.\ number \ $ ', unde number este numărul de linii care trebuie să se potrivească. Utilizați „,” pentru a specifica o gamă de numere.

Pentru a afișa toate liniile din „/ usr / dict / words” care au exact douăsprezece caractere lățime, tastați:

$ grep 'ˆ.\ 12 \ $ '/ usr / dict / words

Pentru a afișa toate liniile din „/ usr / dict / words” care au douăzeci și două sau mai multe caractere lățime, tastați:

$ grep 'ˆ.\ 22, \ $ '/ usr / dict / words

Ex 7: potrivirea liniilor care conțin oricare dintre unele regexps

Pentru a potrivi liniile care conțin oricare dintre un număr de regexps, specificați fiecare dintre regexps pentru a căuta între operatorii de alternanță ('\ |') ca regexp pentru a căuta. Vor fi afișate linii care conțin oricare dintre regex-urile date.

Pentru a afișa toate liniile din „playboy” care conține fie modelele „cartea”, fie „tort”, tastați:

$ grep 'cartea \ | tort' playboy

Ex 8: Linii de potrivire care conțin toate unele Regexps

Pentru a afișa liniile care se potrivesc toate dintr-un număr de regexpuri, utilizați grep pentru a ieși liniile care conțin prima regexp pe care doriți să o potriviți și conductați ieșirea la un grep cu a doua regexp ca argument. Continuați să adăugați țevi la căutările grep pentru toate regexpurile pe care doriți să le căutați.

Pentru a afișa toate liniile din „lista de redare” care conține ambele modele „țărm” și „cer”, indiferent de caz, tastați:

$ grep -i lista de redare „țărmul” | grep -i cer

Ex 9: Linii de potrivire care conțin doar anumite personaje

Pentru a potrivi liniile care conțin doar anumite caractere, utilizați expresia regexp „ˆ [caractere] * $”, unde caracterele sunt cele care se potrivesc.  Pentru a afișa liniile în „/ usr / dict / words” care conțin doar vocale, tastați:

$ grep -i 'ˆ [aeiou] * $' / usr / dict / words

Opțiunea „-i” se potrivește cu caractere indiferent de caz; deci, în acest exemplu, toate caracterele vocale sunt potrivite indiferent de caz.

Ex 10: Găsirea frazelor indiferent de spațiu

O modalitate de a căuta o frază care ar putea apărea cu spații suplimentare între cuvinte sau peste o linie sau întrerupere de pagină, este să eliminați toate alimentările de linie și spațiile suplimentare de la intrare, apoi grep că. Pentru a face acest lucru, introduceți intrarea în tr cu "\ r \ n: \> \ | -" ca argument la opțiunea '-d' (eliminând toate pauzele de linie de la intrare); direcționați-l către filtrul fmt cu opțiunea „-u” (trimiterea textului cu spațiere uniformă); și trimiteți-l la grep cu modelul de căutat.

Pentru a căuta șirul „între pauze” în același timp cu „în fișierul„ docs ”, tastați:

$ cat docs | tr -d '\ r \ n: \> \ |
-'| fmt -u | grep "în același timp cu"

rezumat

În acest articol, am analizat 10 exemple practice de utilizare a comenzii Grep Linux pentru căutarea și găsirea șirurilor într-un fișier text. Pe parcurs, am învățat cum să folosim expresii regulate împreună cu Grep pentru a efectua căutări complexe pe fișiere text. Până acum aveți o idee mai bună despre cât de puternice sunt funcțiile de căutare Linux.

Iată resurse suplimentare pentru cei interesați să afle mai multe despre programarea Linux:

Resurse pentru administratorii de sistem

Resurse pentru programatorii kernel Linux

Dicționar Linux File System

Revizuire cuprinzătoare a modului în care funcționează sistemul de fișiere și directoare Linux

Cum să dezvolți un joc pe Linux
Acum un deceniu, nu mulți utilizatori de Linux ar fi prezis că sistemul lor de operare preferat va fi într-o zi o platformă populară de jocuri pentru ...
Open Source Ports of Commercial Game Engines
Free, open source and cross-platform game engine recreations can be used to play old as well as some of the fairly recent game titles. This article wi...
Cele mai bune jocuri de linie de comandă pentru Linux
Linia de comandă nu este doar cel mai mare aliat al tău când folosești Linux - poate fi și sursa de divertisment, deoarece poți să o folosești pentru ...