12 Praktični primeri ukaza Linux grep


Ste se kdaj srečali z nalogo iskanja določenega niza ali vzorca v datoteki, pa še nimate ideje, kje začeti iskati? No, tukaj je grep na pomoč!

grep je zmogljiv iskalec vzorcev datotek, ki je opremljen z vsako distribucijo Linuxa. Če iz kakršnega koli razloga ni nameščen v vašem sistemu, ga lahko enostavno namestite prek upravitelja paketov (apt-get v Debian/Ubuntu in yum v RHEL/CentOS/Fedora).

$ sudo apt-get install grep         #Debian/Ubuntu
$ sudo yum install grep             #RHEL/CentOS/Fedora

Ugotovil sem, da si najlažje namočite noge z grepom, če se preprosto potopite in uporabite nekaj primerov iz resničnega sveta.

1. Poiščite in poiščite datoteke

Recimo, da ste pravkar namestili novo kopijo novega Ubuntuja na vaš računalnik in da boste poskušali Pythonu narediti skript. Brskali ste po spletu in iskali vadnice, vendar vidite, da sta v uporabi dve različici Pythona, in ne veste, katero je v vaš sistem namestil namestitveni program Ubuntu ali če je namestil katere koli module. Preprosto zaženite ta ukaz:

# dpkg -l | grep -i python
ii  python2.7                        2.7.3-0ubuntu3.4                    Interactive high-level object-oriented language (version 2.7)
ii  python2.7-minimal                2.7.3-0ubuntu3.4                    Minimal subset of the Python language (version 2.7)
ii  python-openssl                   0.12-1ubuntu2.1                     Python wrapper around the OpenSSL library
ii  python-pam                       0.4.2-12.2ubuntu4                   A Python interface to the PAM library

Najprej smo zagnali dpkg –l, v katerem so navedeni nameščeni paketi * .deb v vašem sistemu. Drugič, ta izhod smo napeljali v grep –i python, ki v preprostih stanjih\"gre v grep, filtrira in vrne vse s‘ pythonom '. Možnost –i je namenjena prezrtju velikih in malih črk, saj grep razlikuje med velikimi in malimi črkami.Uporaba možnosti –i je dobra navada, če seveda ne poskušate določiti natančnejšega iskanja.

2. Poiščite in filtrirajte datoteke

Grep se lahko uporablja tudi za iskanje in filtriranje znotraj posameznih datotek ali več datotek. Vzemimo ta scenarij:

Imate nekaj težav s spletnim strežnikom Apache in ste se obrnili na enega izmed številnih izjemnih forumov v internetu, ki vas je prosil za pomoč. Prijazna duša, ki vam odgovori, vas je prosila, da objavite vsebino datoteke/etc/apache2/sites-available/default-ssl. Ali ne bi bilo lažje vam, fantu, ki vam pomaga, in vsem, ki to berejo, če bi lahko odstranili vse komentirane vrstice? No lahko! Samo zaženite to:

# grep –v “#”  /etc/apache2/sites-available/default-ssl

Možnost –v pove, da grep obrne svoj izhod, kar pomeni, da namesto tiskanja ujemajočih se vrstic naredite nasprotno in natisnete vse vrstice, ki se ne ujemajo z izrazom, v tem primeru # komentirane vrstice.

3. Poiščite vse datoteke .mp3 Samo

Grep je lahko zelo uporaben za filtriranje iz stdout. Recimo, da imate na primer celotno mapo, polno glasbenih datotek, v različnih oblikah. Najti morate vse datoteke * .mp3 izvajalca JayZ, vendar ne želite nobene remiksirane skladbe. Uporaba ukaza find z nekaj grep cevmi bo naredila trik:

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

V tem primeru uporabljamo find za tiskanje vseh datotek s pripono * .mp3, cev do grep –i, da filtrira in natisne vse datoteke z imenom\"JayZ" in nato drugo cev do grep –vi, ki filtrira in ne natisne vseh imen datotek z nizom (v vsakem primeru)\"remix".

4. Prikaži število vrstic pred ali po iskalnem nizu

Naslednjih nekaj možnosti sta stikali –A in –B, ki prikazuje ujemajočo se vrstico in število vrstic, ki pridejo pred ali za iskalnim nizom. Medtem ko man stran vsebuje podrobnejšo razlago, se mi zdi, da si je najlažje zapomniti možnosti kot –A = po in –B = pred:

# ifconfig | grep –A 4 eth0
# ifconfig | grep  -B 2 UP

5. Natisne število vrstic okoli tekme

Možnost grep –C je podobna, vendar namesto tiskanja vrstic, ki prihajajo bodisi pred niti za nizom, vrstico natisne v katero koli smer:

# ifconfig | grep –C 2 lo

6. Štetje števila zadetkov

Podobno kot cevovod grep-niza za štetje besed (wc program) lahko tudi vgrajena možnost grepa za vas izvede enako:

# ifconfig | grep –c inet6

7. Išči po datotekah po podanem nizu

Možnost –n za grep je zelo koristna pri razhroščevanju datotek med napakami prevajanja. Prikaže številko vrstice v datoteki danega iskalnega niza:

# grep –n “main” setup..py

8. Rekurzivno poiščite niz v vseh imenikih

Če želite iskati niz v trenutnem imeniku skupaj z vsemi podimeniki, lahko določite možnost –r za rekurzivno iskanje:

# grep –r “function” *

9. Poišče celoten vzorec

Če prenesete možnost –w za grep, poišče celoten vzorec, ki je v nizu. Na primer z uporabo:

# ifconfig | grep –w “RUNNING”

Izpiše vrstico z vzorcem v narekovajih. Po drugi strani pa, če poskusite:

# ifconfig | grep –w “RUN”

Nič ne bo vrnjeno, saj ne iščemo vzorca, temveč celo besedo.

10. Poiščite niz v Gzipped Files

Nekatere omembe so zaslužne grepove izpeljanke. Prvi je zgrep, ki je podobno kot zcat za uporabo v gzipiranih datotekah. Zajema enake možnosti kot grep in se uporablja na enak način:

# zgrep –i error /var/log/syslog.2.gz

11. Ujemanje regularnega izraza v datotekah

Egrep je še ena izpeljanka, ki pomeni\"Razširjeni globalni regularni izraz". Prepozna meta-znake dodatnih izrazov, kot sta +? | In().

egrep je zelo koristen za iskanje izvornih datotek in drugih kosov kode, če se pojavi potreba. Lahko ga prikličete iz običajnega grepa, tako da določite možnost –E.

# grep –E

12. Poiščite niz po fiksnem vzorcu

Fgrep po datoteki ali seznamu datotek išče niz fiksnega vzorca. Enako je kot grep –F. Pogost način uporabe fgrepa je, da mu posredujete datoteko vzorcev:

# fgrep –f file_full_of_patterns.txt file_to_search.txt

To je le izhodišče pri grepu, toda kot verjetno verjetno vidite, je za različne namene neprecenljivo. Poleg preprostih enovrstnih ukazov, ki smo jih implementirali, lahko grep za začetek uporabimo za pisanje močnih opravil cron in robustnih skriptov lupine.

Bodite kreativni, eksperimentirajte z možnostmi na priročni strani in pripravite izraze grep, ki ustrezajo vašim potrebam!