grep

Pronalaženje nizova u tekstualnim datotekama pomoću grepa s regularnim izrazom

Pronalaženje nizova u tekstualnim datotekama pomoću grepa s regularnim izrazom
grep je jedan od najpopularnijih alata za pretraživanje i pronalaženje nizova u tekstualnoj datoteci. Naziv 'grep' potječe od naredbe u zastarjelom Unixovom uređivaču retka - ed naredba za pretraživanje globalno kroz datoteku za regularni izraz i onda tiskanje te su crte bile g / re / str, gdje je re bio regularni izraz koji biste koristili. Na kraju je napisana naredba grep za pretragu datoteke kad se ne koristi ed.

U ovom ćemo vam članku pokazati kako pokrenuti unaprijed pretraženo nizanje pomoću Grepa s regularnim izrazom davanjem 10 praktičnih primjera njegovih implementacija. Mnogi primjeri o kojima se govori u ovom članku imaju praktične implikacije, što znači da ih možete koristiti u svakodnevnom programiranju Linuxa. Sljedeći uzorci opisuju neke primjere regularnih izraza za najčešće tražene uzorke.

Primjer 1: Pronađite jednog zakupca u tekstualnoj datoteci

Za izlaz redova u datoteci 'knjiga' koji sadrže znak '$' upišite:

$ grep '\ $' knjiga

Primjer 2: Pronađite pojedinačni niz u tekstualnoj datoteci

Za izlaz redova u datoteci 'knjiga' koja sadrži niz '14 dolara.99 ', tip:

$ grep '\ $ 14 \.99 'knjiga

Primjer 3: Pronađite jednog posebnog zakupca u tekstualnoj datoteci

Za ispis redaka u datoteci 'knjiga' koji sadrže znak '\' upišite:

$ grep '\\' knjiga

Primjer 4: Podudaranje linija koje počinju s određenim tekstom

Upotrijebite 'ˆ' u regularnom izrazu da biste označili početak retka.

Za izlaz svih redaka u '/ usr / dict / words' koji počinju s 'pro', upišite:

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

Za izlaz svih redaka u datoteci "knjiga" koji počinju tekstom "na početku", bez obzira na velika i mala slova, upišite:

$ grep -i 'u početku' knjiga

BILJEŠKA: Ti su regularni izrazi citirani znakovima '; to je zato što se neke ljuske inače ponašaju prema znaku 'ˆ' kao prema posebnom "metaznaku"

Pored pretraživanja riječi i fraza, grep možete koristiti za traženje složenih tekstualnih obrazaca koji se nazivaju regularnim izrazima. Regularni izraz-ili "regexp" -je tekstualni niz posebnih znakova koji specificira postavljen uzoraka koji se podudaraju.

Tehnički gledano, obrasci riječi ili fraze regularni su izrazi - samo vrlo jednostavni. U regularnom izrazu, većina znakova - uključujući slova i brojeve - predstavlja sebe. Na primjer, uzorak regularnog izraza 1 odgovara nizu '1' i uzorku dječak podudara se s nizom "dječak".

Postoji niz rezerviranih znakova koji se nazivaju metaznakovima i koji se ne predstavljaju u regularnom izrazu, ali imaju posebno značenje koje se koristi za izgradnju složenih uzoraka. Ti su metaznakovi sljedeći: ., *, [, ], ˆ, $ i \. Dobro je napomenuti da su takvi metaznakovi česti među gotovo svim uobičajenim i posebnim Linux distribucijama. Evo dobrog članka koji pokriva posebna značenja metaznaka i daje primjere njihove uporabe.

Primjer 5: Poklapanje linija koje završavaju s određenim tekstom

Upotrijebite '$' kao zadnji znak citiranog teksta kako biste taj tekst podudarali samo na kraju retka. Za izlaz redova u datoteci koja "ide" i završava s uskličnikom, upišite:

$ grep '!$ 'ide

Primjer 6: Podudaranje linija određene duljine

Da biste podudarali linije određene duljine, upotrijebite taj broj '.'znakovi između' ˆ 'i' $ '- na primjer, za podudaranje svih redaka koji su široki dva znaka (ili stupca), upotrijebite' ˆ ... $ 'kao regularni izraz za traženje.

Za izlaz svih redaka u '/ usr / dict / words' koji su široki točno tri znaka upišite:

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

Za duže crte korisnije je koristiti drugu konstrukciju: 'ˆ.\ broj \ $ ', gdje je broj odgovarajući broj redaka. Upotrijebite ',' za određivanje raspona brojeva.

Za izlaz svih redaka u '/ usr / dict / words' koji su široki točno dvanaest znakova, upišite:

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

Za izlaz svih redaka u '/ usr / dict / words' koji su široki dvadeset dva ili više znakova, upišite:

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

Primjer 7: Podudaranje linija koje sadrže bilo koji od regularnih izraza

Da biste podudarali linije koje sadrže bilo koji od određenog broja regularnih izraza, navedite svaki od regularnih izraza koji će se tražiti između operatora izmjenjivanja ('\ |') kao regularni izraz za pretraživanje. Izlazit će redovi koji sadrže bilo koji od zadanih regularnih izraza.

Da biste izbacili sve retke u "playboyu" koji sadrži ili uzorke "knjiga" ili "kolač", upišite:

$ grep 'the book \ | cake' playboy

Primjer 8: Podudaranje linija koje sadrže sve neke regularne izraze

Za izlaz linije koje se podudaraju svi brojnih regularnih izraza, upotrijebite grep za izlazne retke koji sadrže prvi regularni izraz koji želite podudariti i preusmjerite izlaz u grep s drugim regularnim izrazom kao argumentom. Nastavite dodavati cijevi za grep pretraživanja svih regularnih izraza koje želite tražiti.

Za izlaz svih redaka na "popisu za reprodukciju" koji sadrži oba uzorka "obala" i "nebo", neovisno o slučaju, upišite:

$ grep -i 'popis obale' | grep -i nebo

Primjer 9: Podudaranje linija koje sadrže samo određene znakove

Za podudaranje linija koje sadrže samo određene znakove upotrijebite regularni izraz 'ˆ [znakovi] * $', gdje se znakovi podudaraju.  Za ispis redaka u '/ usr / dict / words' koji sadrže samo samoglasnike, upišite:

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

Opcija '-i' odgovara znakovima bez obzira na velika i mala slova; tako da se u ovom primjeru podudaraju svi znakovi samoglasnika bez obzira na velika i mala slova.

Primjer 10: Pronalaženje fraza bez obzira na razmak

Jedan od načina pretraživanja fraze koja bi se mogla pojaviti s dodatnim razmacima između riječi, ili preko reda ili stranice, jest uklanjanje svih dodataka linija i dodatnih razmaka iz unosa, a zatim grep da. Da biste to učinili, dodajte ulaz u tr s "\ r \ n: \> \ | -" kao argument opciji '-d' (uklanjanje svih prijeloma reda s ulaza); cijevi do fmt filtra s opcijom '-u' (izlaz teksta s jednoličnim razmakom); i cijevi koja će se zgrtati s uzorkom za traženjem.

Da biste pretraživali niz prijeloma retka za niz "istovremeno s" u datoteci "dokumenti", upišite:

$ mačka dokumenti | tr -d '\ r \ n: \> \ |
-'| fmt -u | grep 'istovremeno s'

Sažetak

U ovom smo članku pregledali 10 praktičnih primjera upotrebe naredbe Grep Linux za traženje i pronalaženje nizova u tekstualnoj datoteci. Usput smo naučili kako koristiti regularne izraze zajedno s Grepom za provođenje složenih pretraživanja tekstualnih datoteka. Do sada imate bolju ideju o tome koliko su moćne funkcije pretraživanja Linuxa.

Evo dodatnih resursa za one koje zanima više o Linux programiranju:

Resursi za administratore sustava

Resursi za programera jezgre Linuxa

Rječnik Linux datotečnog sustava

Sveobuhvatan pregled rada Linux sustava datoteka i direktorija

10 najboljih igara za igranje na Ubuntuu
Windows platforma bila je jedna od dominantnih platformi za igre zbog ogromnog postotka igara koje se danas razvijaju kako bi podržavale Windows. Može...
5 najboljih arkadnih igara za Linux
U današnje vrijeme računala su ozbiljni strojevi koji se koriste za igre na sreću. Ako ne uspijete dobiti novi visoki rezultat, znat ćete na što misli...
Bitka za Wesnoth 1.13.6 Razvoj objavljen
Bitka za Wesnoth 1.13.6 objavljeno prošlog mjeseca, šesto je razvojno izdanje u izdanju 1.13.x series i donosi niz poboljšanja, ponajviše korisničkog ...