Kako koristiti naredbu Grep u Linuxu [12 korisnih primjera]


Jeste li se ikada suočili sa zadatkom traženja određenog niza ili uzorka u datoteci, ali nemate pojma gdje početi tražiti? Pa onda, evo naredbe grep u pomoć!

grep je moćan pretraživač uzoraka datoteka koji dolazi opremljen uz svaku distribuciju Linuxa. Ako iz bilo kojeg razloga nije instaliran na vašem sustavu, možete ga jednostavno instalirati putem upravitelja paketima kao što je prikazano.

sudo apt install grep         [On Debian, Ubuntu and Mint]
sudo yum install grep         [On RHEL/CentOS/Fedora and Rocky Linux/AlmaLinux]
sudo emerge -a sys-apps/grep  [On Gentoo Linux]
sudo apk add grep             [On Alpine Linux]
sudo pacman -S grep           [On Arch Linux]
sudo zypper install grep      [On OpenSUSE]    

Otkrio sam da je najlakši način da namočite noge s naredbom grep da jednostavno zaronite i upotrijebite neke primjere iz stvarnog svijeta.

1. Pretraživanje i pronalaženje datoteka u Linuxu

Recimo da ste upravo instalirali svježu kopiju novog Ubuntua na svoje računalo i da ćete pokušati Python skriptirati.

Pretraživali ste web u potrazi za vodičima, ali vidite da postoje dvije različite verzije Pythona u upotrebi, a ne znate koju je verziju Pythona instalirao instalacijski program na Ubuntu ili ako je instalirao bilo koji modul.

Jednostavno pokrenite sljedeću naredbu dpkg s grep kao što je prikazano:

dpkg -l | grep -i python

Prvo smo pokrenuli dpkg –l, koji ispisuje instalirane *.deb pakete na vašem sustavu. Drugo, prenijeli smo taj izlaz na grep -i python, koji jednostavno kaže “idite na grep i filtrirajte i vratite sve što ima 'python'. ”

Opcija -i je tu da zanemari velika i mala slova, jer je grep osjetljiv na velika i mala slova. Korištenje opcije -i dobra je navika osim ako, naravno, ne pokušavate zakucati specifičnije pretraživanje.

2. Pretraživanje i filtriranje datoteka u Linuxu

Grep također se može koristiti za pretraživanje i filtriranje unutar pojedinačnih datoteka ili više datoteka. Uzmimo ovaj scenarij:

Imate problema sa svojim Apache web poslužiteljem i obratili ste se jednom od mnogih sjajnih foruma na mreži tražeći pomoć.

Dobra duša koja vam odgovara zamolila vas je da objavite sadržaj svoje datoteke /etc/apache2/apache2.conf. Ne bi li bilo lakše vama, momku koji vam pomaže i svima koji to čitaju da možete ukloniti sve retke s komentarima? Pa, možete! Samo pokrenite ovo:

grep -v ^\# /etc/apache2/apache2.conf | grep .

Opcija -v govori grep-u da invertira svoj izlaz, što znači da umjesto ispisa odgovarajućih redaka, učinite suprotno i ispišite sve retke koji ne odgovaraju izrazu, u ovom slučaju, # komentiranih redaka.

Imajte na umu da smo također koristili grep . na kraju kako bismo sakrili izlaz svih praznih redaka. Na ovaj način vidimo samo konfiguracijske postavke u našem terminalu.

3. Pronađite sve .mp3 datoteke u Linuxu

grep može biti vrlo koristan za filtriranje iz stdout. Na primjer, recimo da imate cijelu mapu punu glazbenih datoteka u hrpi različitih formata.

Želite pronaći sve *.mp3 datoteke izvođača JayZ-a, ali ne želite nijednu remiksiranu pjesmu. Korištenje naredbe pronalaženja s nekoliko grep cijevi će učiniti trik:

find . -name “*.mp3” | grep –i JayZ | grep –vi “remix”

U ovom primjeru koristimo pronađi za ispis svih datoteka s ekstenzijom *.mp3, usmjeravajući ih na grep –i za filtriranje van i ispišite sve datoteke s imenom “JayZ ” i zatim drugu cijev do grep –vi koja filtrira i ne ispisuje sve nazive datoteka s nizom (u svakom slučaju) “remiks”.

4. Prikažite broj redaka prije ili poslije niza za pretraživanje

Još nekoliko opcija su prekidači -A i -B, koji prikazuju odgovarajući redak i niz redaka koji dolaze prije ili poslije niza za pretraživanje.

Dok man stranica daje detaljnije objašnjenje, smatram da je najlakše zapamtiti opcije kao -A=nakon i -B=< snažno>prije:

ifconfig | grep -A 4 inet
ifconfig | grep -B 2 UP

5. Ispisuje broj redaka oko podudaranja

Grep-ova opcija -C je slična, ali umjesto ispisa redaka koji dolaze prije ili poslije niza, ispisuje retke u oba smjera:

ifconfig | grep -C 2 lo

 TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 15314  bytes 1593769 (1.5 MB)
        RX errors 0  dropped 0  overruns 0  frame 0

6. Izbrojite broj podudaranja

Slično povezivanju grep niza s brojem riječi (wc naredba), grep-ova ugrađena opcija može učiniti isto za vas:

ifconfig | grep -c inet6

7. Pretraživanje datoteka prema zadanom nizu u Linuxu

Opcija –n za grep vrlo je korisna pri otklanjanju pogrešaka u datotekama tijekom kompilacijskih pogrešaka. Prikazuje broj retka u datoteci zadanog niza za pretraživanje:

grep -n "main" setup.py

8. Rekurzivno pretražite niz u svim imenicima

Ako želite pretraživati niz u trenutnom direktoriju zajedno sa svim poddirektorijima, možete odrediti opciju –r za rekurzivno pretraživanje:

grep -r “function” *

9. Potražite cijeli uzorak

Prosljeđivanjem opcije -w u grep traži se cijeli uzorak koji se nalazi u nizu. Na primjer, pomoću:

ifconfig | grep -w "RUNNING"

Ispisat će redak koji sadrži uzorak pod navodnicima. S druge strane, ako pokušate:

ifconfig | grep -w "RUN"

Ništa neće biti vraćeno jer ne tražimo uzorak, već cijelu riječ.

10. Pretražite niz u Gzipiranim datotekama

Zaslužuju spomenuti grep-ove izvedenice. Prvi je zgrep, koji je, sličan zcat, za upotrebu na gzipanim datotekama. Ima iste opcije kao grep i koristi se na isti način:

zgrep -i error /var/log/syslog.2.gz

11. Spajanje regularnih izraza u datotekama

Naredba egrep još je jedna izvedenica koja označava “Prošireni globalni regularni izraz”. Prepoznaje dodatne meta-znakove izraza kao što je at + ? | i ().

egrep naredba vrlo je korisna za pretraživanje izvornih datoteka i drugih dijelova koda, ako se ukaže potreba. Može se pozvati iz uobičajenog grepa navođenjem opcije -E.

grep -E

12. Pretraživanje niza fiksnog uzorka

Naredba fgrep pretražuje datoteku ili popis datoteka za fiksni niz uzoraka. To je isto kao grep -F. Uobičajen način korištenja fgrepa je prosljeđivanje datoteke uzoraka u njega:

fgrep –f file_full_of_patterns.txt file_to_search.txt

Ovo je samo početna točka s grep, ali kao što vjerojatno možete vidjeti, neprocjenjivo je za razne svrhe. Osim jednostavnih naredbi u jednom retku koje smo implementirali, grep se može koristiti za pisanje snažnih cron poslova i robusnih shell skripti, za početak.

Budite kreativni, eksperimentirajte s opcijama na man stranici i osmislite grep izraze koji služe vašim potrebama!