Kako koristiti naredbu fgrep za pronalaženje tekstualnih nizova u datotekama


Ukratko: u ovom vodiču prilagođenom početnicima raspravljat ćemo o nekim praktičnim primjerima naredbe fgrep. Do kraja ovog vodiča korisnici će moći učinkovito izvoditi operacije pretraživanja teksta pomoću sučelja naredbenog retka.

Pretraživanje teksta jedna je od najčešće izvođenih operacija. Međutim, ovaj jednostavan zadatak brzo postaje dugotrajan ako korisnici nisu upoznati s ispravnim alatima. U Linuxu postoje različiti uslužni programi za filtriranje teksta kao što su awk, sed, cut itd.

Međutim, u Linuxu je fgrep najpoželjniji uslužni program za jednostavno pretraživanje teksta. U ovom vodiču raspravljat ćemo o nekim praktičnim primjerima naredbe fgrep koja se može koristiti u svakodnevnom životu.

Naredba fgrep u Linuxu spada u obitelj naredbi grep. Međutim, koristi se za traženje fiksnog uzorka niza umjesto regularnih izraza. Stoga je naziv naredbe fgrep (Fiksni GREP).

Sintaksa naredbe fgrep slična je ostalim naredbama obitelji grep:

fgrep [OPTIONS] PATTERNS [FILES]

Za početak, stvorimo običnu tekstualnu datoteku sa sljedećim sadržajem kao primjer:

cat input.txt

Ovdje možemo vidjeti da je tekstualna datoteka spremna sa sadržajem uzorka. Razmotrimo sada neke uobičajene primjere naredbe fgrep u sljedećih nekoliko primjera.

1. Po čemu se fgrep razlikuje od naredbi grep i egrep?

Kao što naziv sugerira, naredba fgrep koristi se za traženje fiksnih uzoraka nizova. Interpretira uzorak kao fiksni niz umjesto regularnog izraza. Stoga izvodi operaciju pretraživanja na vremenski učinkovit način.

Da bismo razumjeli razliku, upotrijebimo znak (.) s točkom s naredbom grep.

Ovaj jednostavni regularni izraz odgovara bilo kojem pojedinačnom znaku osim za kraj retka:

grep ha. input.txt

U gornjem ispisu možemo vidjeti da znak točke (.) odgovara tekstu har, hat i has.

Sada upotrijebimo isti obrazac s naredbom fgrep i promatrajmo rezultat:

fgrep ha. input.txt

U gornjem izlazu možemo vidjeti da naredba ne uspijeva pronaći zadani uzorak.

To se događa jer naredba fgrep ne prepoznaje regularne izraze i pokušava tražiti nepostojeći uzorak – “ha. ”.

2. Kako tražiti uzorak u datoteci

Započnimo s osnovnim primjerom u kojem ćemo tražiti string professional u datoteci input.txt:

fgrep professionals input.txt

Kao što vidimo, slaganje uzorka je uspješno na dva mjesta i označeno je crvenom bojom.

3. Kako postaviti Grep izlaznu boju za podudarne uzorke

U prethodnom primjeru vidjeli smo da je, prema zadanim postavkama, odgovarajući uzorak označen crvenom bojom. Međutim, možemo promijeniti ovo ponašanje dodjeljivanjem različite vrijednosti varijablama okruženja GREP_COLOR.

Dodijelimo vrijednost 32 varijabli okoline GREP_COLOR kako bismo istaknuli odgovarajući uzorak zelenom bojom:

export GREP_COLOR=32
fgrep professionals input.txt

Sada, prije nego prijeđete na sljedeći primjer, poništite varijablu okoline GREP_COLOR kako biste omogućili zadano ponašanje:

unset GREP_COLOR

4. Kako tražiti više uzoraka u datoteci

Ponekad moramo izvršiti podudaranje uzorka za više nizova. U takvim slučajevima možemo dati uzorke iz tekstualne datoteke umjesto argumenta naredbenog retka.

Kreirajmo tekstualnu datoteku koja sadrži više uzoraka u zasebnom retku:

cat pattern.txt

professionals
website

Sada upotrijebimo ovu datoteku s opcijom -f za višestruko podudaranje uzoraka:

fgrep -f pattern.txt input.txt

U gornjem izlazu možemo vidjeti da je podudaranje uzoraka uspjelo za nizove professionals i website.

5. Kako ograničiti broj podudaranja u datoteci

Prema zadanim postavkama, naredba fgrep nastavlja s uparivanjem uzorka dok se cijela datoteka ne obradi.

Međutim, ponekad moramo ograničiti broj podudaranja. U takvim slučajevima možemo koristiti opciju -m s naredbom:

fgrep -m 1 professionals input.txt

TecMint was started on 15th August 2012 by technical professionals and all the

U ovom primjeru, naredba fgrep zaustavlja obradu datoteke nakon podudaranja s prvim uzorkom.

6. Kako ispisati naziv datoteke kada tražite uzorak

Ponekad samo trebamo pronaći naziv datoteke u kojoj je prisutan određeni uzorak. U takvim slučajevima možemo koristiti opciju -l naredbe fgrep:

fgrep -l professionals input.txt

input.txt

Ovdje možemo vidjeti da naredba samo ispisuje naziv datoteke umjesto redaka s odgovarajućim uzorcima.

7. Kako ispisati naziv datoteke kada podudaranje uzorka ne uspije

U prethodnom smo primjeru vidjeli kako ispisati naziv datoteke kada usklađivanje uzorka uspije. Sada, da vidimo kako izvršiti operaciju na obrnuti način.

Pokušajmo pronaći nepostojeći uzorak u datoteci i promatramo rezultat:

fgrep -L non-existing-word input.txt

input.txt

U ovom primjeru upotrijebili smo opciju -L naredbe koja ispisuje naziv datoteke kada podudaranje uzorka ne uspije.

8. Kako potisnuti poruke o pogreškama

Rješavanje pogrešaka igra ključnu ulogu tijekom pisanja skripti ljuske. Međutim, u nekim nekritičnim scenarijima možemo sa sigurnošću zanemariti poruke o pogrešci.

U fgrep-u možemo koristiti opciju -s koja potiskuje pogreške povezane s nepostojećim ili nečitljivim datotekama. Da bismo bolje razumjeli ovo ponašanje, pokušajmo potražiti uzorak u nepostojećoj datoteci:

fgrep -s professionals non-existing-file.txt
echo $?

2

U gornjem izlazu možemo vidjeti da naredba ne prikazuje nikakvu pogrešku u standardnom toku pogrešaka. Međutim, neuspjeh se prijavljuje povratnom vrijednošću koja nije nula.

Osim toga, također možemo primijetiti isto ponašanje kada je datoteka nečitljiva. Dakle, prvo promijenite dopuštenje datoteke pomoću naredbe chmod:

chmod 000 input.txt 
ls -l input.txt

Sada pokušajte potražiti obrazac i promatrajte rezultat:

fgrep -s professionals input.txt 
echo $?

9. Kako isključiti djelomično podudarne retke

U prethodnim primjerima vidjeli smo da naredba fgrep izvodi djelomično podudaranje. Međutim, u nekim slučajevima moramo izvršiti točno podudaranje za cijelu liniju. U takvim slučajevima možemo koristiti opciju -x naredbe fgrep.

fgrep -nx "the same site is sometimes hard to find." input.txt

U gornjem izlazu, točno podudaranje retka događa se u retku broj 20.

10. Kako isključiti datoteke tijekom rekurzivnog pretraživanja

Ponekad moramo preskočiti određene datoteke tijekom izvođenja operacija pretraživanja. U takvim slučajevima možemo koristiti opciju --exclude naredbe fgrep.

Da biste ovo razumjeli, prvo stvorite direktorij i kopirajte nekoliko oglednih datoteka u njega:

mkdir dir-1
cp input.txt dir-1/input.txt
cp input.txt dir-1/input.data
cp input.txt dir-1/input.md 

Potražimo sada uzorak u svim datotekama direktorija dir-1 osim datoteka “.txt ”:

fgrep -r --exclude *.txt professionals dir-1

U gornjem izlazu možemo vidjeti da je podudaranje uzoraka izvršeno na datotekama s ekstenzijama “.md ” i “.data ”.

11. Kako isključiti više vrsta datoteka tijekom rekurzivnog pretraživanja

U prethodnom smo primjeru vidjeli kako izuzeti datoteke s određenim ekstenzijama. Međutim, naredba postaje dugotrajna kada želimo isključiti datoteke s više ekstenzija. U takvim slučajevima možemo dati uzorak isključivanja iz datoteke umjesto argumenta naredbenog retka:

Dakle, stvorimo tekstualnu datoteku koja sadrži više uzoraka isključivanja u zasebnom retku:

cat skip-pattern.txt 
*.txt
*.data

Sada upotrijebimo ovu datoteku s opcijom --exclude-from:

fgrep -r --exclude-from skip-pattern.txt professionals dir-1

Ovdje možemo vidjeti da je podudaranje uzoraka izvršeno samo na datotekama s ekstenzijama “.md ”.

12. Kako uključiti datoteke tijekom rekurzivnog pretraživanja

U prethodnim primjerima vidjeli smo kako izuzeti datoteke tijekom rekurzivnog izvođenja operacija pretraživanja. Sada, da vidimo kako izvršiti operaciju na obrnuti način.

Upotrijebimo opciju --include naredbe fgrep da izvršimo pretraživanje datoteka s ekstenzijom “*.txt”:

fgrep -r --include "*.txt" professionals dir-1

U gornjem izlazu možemo vidjeti da je podudaranje uzoraka preskočeno za datoteke s ekstenzijama “*.md ” i “*.data”.

U ovom smo članku raspravljali o nekim korisnim primjerima naredbe fgrep. Početnici mogu koristiti ove primjere u svakodnevnom životu kako bi poboljšali produktivnost tijekom rada s Linuxom.

Znate li za neki drugi najbolji primjer naredbe fgrep u Linuxu? Recite nam svoje stavove u komentarima ispod.