12 Linuxi grep-käsu praktilisi näiteid


Kas olete kunagi kokku puutunud ülesandega otsida failist teatud string või muster, kuid pole veel aimugi, kust otsima hakata? Noh, siin on appi haarata!

grep on võimas failimustrite otsija, mis on varustatud kõigi Linuxi distributsioonidega. Kui seda mingil põhjusel teie süsteemi pole installitud, saate selle hõlpsasti oma pakihalduri kaudu installida (apt-get Debian/Ubuntu ja yum RHEL/CentOS/Fedora).

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

Olen avastanud, et lihtsaim viis jalgu grepiga märjaks teha on lihtsalt sisse sukelduda ja kasutada mõnda reaalse maailma näidet.

1. Otsige ja leidke faile

Oletame, et olete just oma arvutisse installinud uue Ubuntu värske koopia ja annate Pythoni skriptidele võtte. Olete uurinud veebist õpetusi, kuid näete, et Pythonis on kasutusel kaks erinevat versiooni ja te ei tea, kumma installis teie süsteem Ubuntu installer või kui see installis mooduleid. Käivitage lihtsalt see käsk:

# 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

Esiteks käivitasime dpkg –l, mis loetleb teie süsteemi installitud * .deb paketid. Teiseks viisime selle väljundi grep-i pythonisse, kus lihtsad olekud "lähevad grepima ja filtreerivad välja ning tagastavad kõik, kus on" python ". Valik –i on selleks, et ignoreerida väiketähti, kuna grep on tõstutundlik. Valiku –i kasutamine on hea harjumus, kui te muidugi ei püüa konkreetsemat otsingut lüüa.

2. Failide otsimine ja filtreerimine

Grepi saab kasutada ka üksikute failide või mitme faili otsimiseks ja filtreerimiseks. Võtame selle stsenaariumi:

Teil on oma Apache veebiserveriga probleeme ja olete pöördunud ühte paljudest võrgus leiduvatest ägedatest foorumitest ja palunud abi. Lahke hing, kes teile vastab, on palunud teil oma faili/etc/apache2/sites-available/default-ssl sisu postitada. Kas teil, teie abistaval poisil ja kõigil, kes seda loevad, pole lihtsam, kui saaksite eemaldada kõik kommenteeritud read? Noh, saate! Lihtsalt käivitage see:

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

Valik –v käsib grepil väljund ümber pöörata, mis tähendab, et sobivate ridade printimise asemel tehke vastupidine ja printige kõik read, mis ei vasta avaldisele, antud juhul # kommenteeritud rida.

3. Leidke kõik ainult .mp3-failid

Grep võib olla väga kasulik stdoutist filtreerimiseks. Oletame näiteks, et teil on terve kaust täis muusikafaile hunnikus erinevates vormingutes. Soovite leida kõik esitaja JayZ-i * .mp3-failid, kuid te ei soovi ühtegi remiksitud lugu. Paari grep-toruga leidmise käsu kasutamine teeb trikki:

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

Selles näites kasutame otsi leidmiseks kõigi * .mp3 laiendiga failide printimiseks, ühendades faili grep –i filtreerimiseks ja printides kõik failid nimega „JayZ” ja seejärel teise toru grep –vi-le, mis filtreerib välja ega prindi kõiki failinimesid stringiga (igal juhul) “remix”.

4. Kuva ridade arv enne või pärast otsingustringi

Veel paar võimalust on –A ja –B lülitid, mis kuvavad sobitatud joone ja ridade arvu, mis tulevad kas enne või pärast otsingustringi. Kuigi manulehekülg annab üksikasjalikuma selgituse, on mul kõige lihtsam meeles pidada valikuid –A = pärast ja –B = enne:

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

5. Prindib vaste ümber olevate ridade arvu

Võimalus grep ’–C on sarnane, kuid selle asemel, et printida enne või pärast stringi tulnud ridu, prindib see read mõlemas suunas:

# ifconfig | grep –C 2 lo

6. Loe matšide arv

Sarnaselt grep-stringi sisestamisele sõnade loendamisse (wc-programm) võib ka grepi sisseehitatud suvand teie jaoks sama teha:

# ifconfig | grep –c inet6

7. Otsige failidest antud stringi järgi

Grep-i valik –n on failide kompileerimisvigade silumisel väga kasulik. See kuvab antud otsingustringi failis rea numbri:

# grep –n “main” setup..py

8. Otsige stringi rekursiivselt kõigist kataloogidest

Kui soovite otsida stringi praegusest kataloogist koos kõigi alamkataloogidega, saate rekursiivseks otsimiseks määrata -r-i:

# grep –r “function” *

9. otsib kogu mustrit

Valiku –w edastamine grep otsib kogu stringis olevat mustrit. Näiteks kasutades:

# ifconfig | grep –w “RUNNING”

Trükib mustrit sisaldava joone jutumärkides. Teiselt poolt, kui proovite:

# ifconfig | grep –w “RUN”

Midagi ei tagastata, kuna me ei otsi mustrit, vaid tervet sõna.

10. Otsige stringi Gzippi failidest

Mõnda mainimist väärivad grepi tuletised. Esimene on zgrep, mis sarnaselt zcatiga on mõeldud kasutamiseks gzipitud failides. See võtab samu valikuid kui grep ja seda kasutatakse samamoodi:

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

11. Regulaaravaldise sobitamine failides

Egrep on veel üks tuletis, mis tähistab laiendatud globaalset regulaaravaldist. See tunneb ära täiendavad väljendi metamärgid, näiteks +? | ja().

egrep on vajaduse korral väga kasulik lähtefailide ja muude koodijuppide otsimiseks. Seda saab käivitada tavalisest grepist, määrates valiku –E.

# grep –E

12. Otsige fikseeritud mustri stringi

Fgrep otsib failist või failide loendist fikseeritud mustristringi. See on sama mis grep –F. Tavaline viis fgrepi kasutamiseks on mustrite faili edastamine sellele:

# fgrep –f file_full_of_patterns.txt file_to_search.txt

See on lihtsalt algusgrepiga grep, kuid nagu arvatavasti suudate näha, on see mitmel eesmärgil hindamatu. Lisaks lihtsatele ühe rea käsudele, mille oleme rakendanud, saab grepi kasutada alguseks võimsate croni tööde ja tugevate shelliskriptide kirjutamiseks.

Olge loominguline, katsetage manulehe valikuid ja mõelge välja oma vajadustele vastavaid grep-väljendeid!