Android

Naredba Grep u Linuxu (pronađite tekst u datotekama)

Supersection 1, More Comfortable

Supersection 1, More Comfortable

Sadržaj:

Anonim

Naredba grep koja stoji za "globalni ispis regularnih izraza" jedna je od najmoćnijih i najčešće korištenih naredbi u Linuxu.

Grep pretražuje jednu ili više ulaznih datoteka za linije koje se podudaraju s određenim uzorkom i upisuje svaki odgovarajući redak na standardni izlaz. Ako nisu određene datoteke, grep čita sa standardnog ulaza, što je obično izlaz druge naredbe.

U ovom ćemo vam vodiču pokazati kako koristiti naredbu grep kroz praktične primjere i detaljna objašnjenja najčešćih opcija GNU grep a.

Sintaksa naredbe grep naredbe

Prije nego što razmotrimo kako koristiti naredbu grep , započnimo s pregledom osnovne sintakse.

Izrazi uslužnog programa grep imaju sljedeći oblik:

grep PATTERN

Stavke u uglatim zagradama nisu obavezne.

  • OPTIONS - Nula ili više opcija. Grep pruža brojne mogućnosti koje kontroliraju njegovo ponašanje. PATTERN - Obrazac pretraživanja. FILE - nula ili više imena ulaznih datoteka.

Kako biste mogli pretraživati ​​datoteku, korisnik koji izvršava naredbu mora imati pristup čitanju.

Kako koristiti grep za traženje niza u datotekama

Najosnovnija upotreba grep naredbe je traženje niza (teksta) u datoteci.

Na primjer, za prikaz linija iz /etc/passwd datoteke koja sadrži bash možete koristiti sljedeću naredbu:

grep bash /etc/passwd

Izlaz bi trebao izgledati ovako:

root:x:0:0:root:/root:/bin/bash linuxize:x:1000:1000:linuxize:/home/linuxize:/bin/bash

Ako niz sadrži razmake, trebate ga priložiti jednim ili dvostrukim navodnicima:

grep "Gnome Display Manager" /etc/passwd

Invert match (Izuzmi)

Za prikaz linija koje ne odgovaraju obrascu, koristite opciju -v (ili --invert-match ).

Na primjer, za prikaz redaka iz /etc/passwd datoteke koji ne sadrže string nologin možete koristiti sljedeću naredbu:

grep -v nologin /etc/passwd

root:x:0:0:root:/root:/bin/bash colord:x:124:124::/var/lib/colord:/bin/false git:x:994:994:git daemon user:/:/usr/bin/git-shell linuxize:x:1000:1000:linuxize:/home/linuxize:/bin/bash

Kako koristiti Grep za traženje niza u naredbenom izlazu

Umjesto određivanja ulaznih datoteka, možete isprazniti izlaz druge naredbe za grep i prikazati samo linije koje odgovaraju zadanom obrascu.

Na primjer, da biste saznali koji se procesi u vašem sustavu pokreću kao korisnički www-data , možete koristiti sljedeću ps naredbu:

ps -ef | grep www-data

www-data 18247 12675 4 16:00 ? 00:00:00 php-fpm: pool www root 18272 17714 0 16:00 pts/0 00:00:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn www-data www-data 31147 12770 0 Oct22 ? 00:05:51 nginx: worker process www-data 31148 12770 0 Oct22 ? 00:00:00 nginx: cache manager process

Na naredbu možete uključiti više cijevi. Kao što vidite u izlazu iznad, također postoji linija koja sadrži grep postupak. Ako ne želite da se ova linija prikazuje, proslijedite izlaz drugoj grep instanci kao što je prikazano u nastavku.

ps -ef | grep www-data | grep -v grep

www-data 18247 12675 4 16:00 ? 00:00:00 php-fpm: pool www root 18272 17714 0 16:00 pts/0 00:00:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn www-data www-data 31147 12770 0 Oct22 ? 00:05:51 nginx: worker process www-data 31148 12770 0 Oct22 ? 00:00:00 nginx: cache manager process

Rekurzivna pretraga

Za rekurzivno traženje uzorka koristite opciju -r (ili - --recursive ). Ovo će pretraživati ​​sve datoteke u navedenom direktoriju, preskačući simbole koji se javljaju rekurzivno. Za praćenje svih simboličkih veza, koristite opciju -R (ili --dereference-recursive ).

U sljedećem primjeru tražimo niz linuxize.com u svim datotekama u /etc direktoriju:

grep -r linuxize.com /etc

Naredba će ispisati odgovarajuće retke s prefiksom pune putanje do datoteke.

/etc/hosts:127.0.0.1 node2.linuxize.com /etc/nginx/sites-available/linuxize.com: server_name linuxize.com www.linuxize.com;

Ako umjesto toga, ili koristite opciju -R grep će slijediti sve simboličke veze:

grep -R linuxize.com /etc

Primjetite zadnji redak izlaza. Taj se redak ne ispisuje u gornjem primjeru jer su datoteke unutar direktorija s sites-enabled Nginx sites-enabled a simbol veze do konfiguracijskih datoteka unutar mape sites-available za sites-available .

/etc/hosts:127.0.0.1 node2.linuxize.com /etc/nginx/sites-available/linuxize.com: server_name linuxize.com www.linuxize.com; /etc/nginx/sites-enabled/linuxize.com: server_name linuxize.com www.linuxize.com;

Prikaži samo naziv datoteke

Za suzbijanje zadanih grep izlaza i ispis samo imena datoteka koje sadrže podudarni uzorak, možete upotrijebiti opciju -l (ili --files-with-matches ).

Na primjer, pretraživati ​​sve datoteke koje završavaju s .conf u trenutnoj radnoj mapi i ispisati samo imena datoteka koje sadrže niz linuxize.com tipa:

grep -l linuxize.com *.conf

Izlaz će izgledati ovako:

tmux.conf haproxy.conf

Opcija -l se obično koristi u kombinaciji s rekurzivnom opcijom -R :

grep -Rl linuxize.com /tmp

Neosjetljivo pretraživanje slučaja

grep naredba grep velika i mala slova. To znači da se velika i mala slova tretiraju kao različiti.

Da biste ignorirali slučaj prilikom pretraživanja, koristite opciju -i (ili --ignore-case ).

Na primjer, kada tražite Zebra bez ikakvih opcija, sljedeća naredba neće prikazati nijedan izlaz, tj. Postoje odgovarajuće linije:

grep Zebra /usr/share/words

Ali ako izvršite pretraživanje neosjetljivo na velika slova -i opcijom -i , podudarat će se s velikim i malim slovima:

grep -i Zebra /usr/share/words

Navođenje "Zebre" podudara se sa "zebrom", "ZEbrA" ili bilo kojom drugom kombinacijom velikih i malih slova tog niza.

zebra zebra's zebras

Traži cjelovite riječi

Kada tražite "gnu", grep će također ispisati retke u kojima je "gnu" ugrađen u veće riječi, poput "cygnus" ili "magnum".

grep gnu /usr/share/words

cygnus gnu interregnum lgnu9d lignum magnum magnuson sphagnum wingnut

Da biste vratili samo one retke u kojima je navedeni niz cijela riječ (zatvorena znakovima koji nisu riječi), koristite opciju -w (ili --word-regexp ).

Znakovi riječi uključuju alfanumeričke znakove ( az , AZ i 0-9 ) i podvlake ( _ ). Svi ostali znakovi smatraju se znakovima koji nisu riječi.

grep -w gnu /usr/share/words

gnu

Prikaži brojeve linija

Da biste prikazali broj redaka koji sadrže niz koji odgovara uzorku, upotrijebite opciju -n (ili - --line-number ). Kada koristite ovu opciju, grep će ispisati podudaranja na standardni izlaz s prefiksom broja retka na kojem je pronađen.

Na primjer, za prikaz redaka iz /etc/services datoteke koja sadrži bash nizova prefiksa s odgovarajućim brojem retka, možete koristiti sljedeću naredbu:

grep -n 10000 /etc/services

Rezultat u nastavku pokazuje da se podudarnosti nalaze na linijama 10423 i 10424.

10423:ndmp 10000/tcp 10424:ndmp 10000/udp

Broji utakmice

Za ispis broja odgovarajućih linija na standardni izlaz, koristite opciju -c (ili --count ).

U primjeru u nastavku računamo broj računa koji imaju /usr/bin/zsh kao ljusku.

grep -c '/usr/bin/zsh' /etc/passwd

4

Traženje više nizova (uzoraka)

Dva ili više obrazaca pretraživanja mogu se spojiti pomoću operatora ILI | , grep po zadanom tumači uzorak kao osnovni regularni izraz gdje su meta-znakovi poput | gube svoje posebno značenje i moraju se upotrijebiti njihove polijepljene verzije.

U primjeru u nastavku pretražujemo sve pojave riječi fatal , error i critical u datoteci pogreške Nginx log:

grep 'fatal\|error\|critical' /var/log/nginx/error.log

grep -E 'fatal|error|critical' /var/log/nginx/error.log

Tihi način rada

-q (ili - --quiet ) govori grep da ne piše ništa na terminalu (standardni izlaz). Ako se pronađe podudaranje, naredba će izaći sa statusom 0 . Ovo je korisno kada koristite grep u skriptama školjke gdje želite provjeriti sadrži li datoteka niz i izvesti određenu radnju ovisno o rezultatu.

Evo primjera upotrebe grep u tihom načinu kao testne naredbe u naredbi if :

if grep -q PATTERN filename then echo pattern found else echo pattern not found fi

Osnovni pravilni izraz

GNU Grep ima dva skupa značajki regularnog izraza, Basic i Extended. grep po zadanom tumači uzorak kao osnovni pravilan izraz.

Kad se koristi u osnovnom načinu regularnog izraza, svi ostali znakovi osim meta-znakova, zapravo su regularni izrazi koji se poklapaju. Slijedi popis najčešće korištenih meta-znakova:

  • Upotrijebite simbol ^ (caret) za podudaranje izraza na početku retka. U sljedećem primjeru, niz ^kangaroo podudarat će se samo ako se dogodi na samom početku retka.

    grep "^kangaroo" file.txt

    Upotrijebite simbol $ (dolar) da biste uskladili izraz na kraju retka. U sljedećem primjeru, kangaroo$ niz kangaroo$ podudarat će se samo ako se dogodi na samom kraju retka.

    grep "kangaroo$" file.txt

    Upotrijebite . (točka) simbol koji odgovara bilo kojem pojedinačnom znaku. Na primjer, za podudaranje bilo čega što započinje s kan zatim ima dva znaka i završava nizom roo , mogli biste upotrijebiti sljedeći obrazac:

    grep "kan..roo" file.txt

    Koristiti (zagrade) da bi se podudarali s bilo kojim pojedinačnim znakom u zagradama. Na primjer, pronađite retke koji sadrže accent ili accent , a mogli biste koristiti sljedeći obrazac:

    grep "accet" file.txt

    Koristiti (zagrade) da bi se podudarali s bilo kojim pojedinačnim znakom u zagradama. Sljedeći će obrazac odgovarati bilo kojoj kombinaciji nizova koji sadrže co(any_letter_except_l)a , poput coca , cobalt i tako dalje, ali neće odgovarati linijama koje sadrže cola , grep "coa" file.txt

Da biste izbjegli posebno značenje sljedećeg znaka, upotrijebite simbol \ (kosa crta).

Prošireni regularni izrazi

Za tumačenje uzorka kao produženog regularnog izraza, koristite opciju -E (ili --extended-regexp ). Prošireni regularni izrazi uključuju sve osnovne meta-znakove, zajedno s dodatnim meta-znakovima za stvaranje složenijih i snažnijih obrazaca pretraživanja. Ispod je nekoliko primjera:

  • Usklađivanje i izdvajanje svih adresa e-pošte iz određene datoteke:

    grep -E -o "\b+@+\.{2, 6}\b" file.txt

    Podudarite i izvucite sve važeće IP adrese iz određene datoteke:

    grep -E -o '(25|2|??)\.(25|2|??)\.(25|2|??)\.(25|2|??)' file.txt

Opcija -o koristi se za ispis samo odgovarajućeg niza.

Ispišite retke prije utakmice

Za ispis određenog broja redaka prije podudaranja redaka koristite opciju -B (ili - --before-context ).

Na primjer, za prikaz pet redaka vodećeg konteksta prije podudaranja linija, upotrijebili biste sljedeću naredbu:

grep -B 5 root /etc/passwd

Ispisati linije nakon podudaranja

Za ispis određenog broja redaka nakon podudaranja linija koristite opciju -A (ili --after-context ).

Na primjer, za prikaz pet linija slijedećeg konteksta nakon podudaranja linija, upotrijebili biste sljedeću naredbu:

grep -A 5 root /etc/passwd

Zaključak

Naredba grep omogućuje vam da tražite uzorak unutar datoteka. Ako se podudara ako ga pronađete, grep će ispisati retke koji sadrže navedeni uzorak.

Na Grep korisničkom priručniku za korisnike možete saznati više o Grepu.

grep terminal