grep

Ukaz egrep Linux s primeri

Ukaz egrep Linux s primeri
Ukaz egrep spada v družino ukaza grep, ki se uporablja za iskanje vzorcev v Linuxu. Če ste uporabili ukaz grep, egrep deluje enako kot grep -E (grep Extended regex '). Egrep pregleda določeno datoteko, vrstico do vrstice in natisne vrstice, ki vsebujejo iskalni niz / regularni izraz. V tem članku bomo razložili 15 koristnih primerov ukazov egrep, ki bodo novincem in celo strokovnjakom pomagali pri pomembnih iskanjih v Linuxu. Te primere smo izvedli v sistemu Debian 10 Buster, vendar jih je mogoče enostavno kopirati na večini distribucij Linuxa.

Primer 1: Iskanje določenega niza v datoteki

To je najpogostejša uporaba ukaza egrep. Naredite tako, da določite niz, ki ga želite iskati, in ime datoteke, v kateri želite iskati ta niz. Rezultat nato prikaže celotno vrstico, ki vsebuje iskani niz.

Sintaksa:

$ egrep ime_datoteke "search_string"

Primer:

$ egrep debian vzorčna datoteka.txt

V tem primeru sem v navedeni besedilni datoteki iskal besedo »debian«. Ogledate si lahko, kako rezultati prikažejo celotno vrstico, ki vsebuje besedo “debian”:

2. primer: Iskanje določenega niza v več datotekah

Z ukazom egrep lahko iščete niz med več datotekami, ki se nahajajo v istem imeniku. Pri določanju »vzorca« za iskane datoteke morate biti le nekoliko natančnejši. To bo postalo bolj jasno s primerom, ki ga bomo predstavili.

Sintaksa:

$ egrep "search_string" ime_vzorca datoteke

Primer:

Tu bomo iskali besedo "debian" v vseh jezikih .datoteke txt z določitvijo vzorca imena datoteke, kot sledi:

$ egrep “debian” *.txt

Ukaz je natisnil vse vrstice, skupaj z imeni datotek, ki vsebujejo besedo "debian" iz vseh datotek .datoteke txt v trenutnem imeniku.

3. primer: rekurzivno iskanje niza v celotnem imeniku

Ko želite iskati niz v vseh datotekah iz imenika in njegovih podimenikov, lahko to storite z uporabo zastavice -r z ukazom egrep.

Sintaksa:

$ egrep -r "search_string" *

Primer:

V tem primeru iščem besedo "sample" v datotekah celotnega trenutnega imenika (Downloads).

$ egrep -r "vzorec" *

Rezultati vsebujejo vse vrstice, skupaj z imeni datotek, ki vsebujejo besedo »vzorec« iz vseh datotek v imeniku Prenosi in njegovih podimenikih.

Primer 4: Izvedba iskanja, ki ne razlikuje med velikimi in malimi črkami

Z zastavico -i lahko z ukazom egrep natisnete rezultate na podlagi iskalnega niza, ne da bi vam bilo treba skrbeti za njegov primer.

Sintaksa:

$ egrep -i ime datoteke "search_string"

Primer:

Tu iščem besedo “debian” in želim, da se v rezultatih prikažejo vse vrstice iz datoteke, ki vsebujejo besedo “debian” ali “Debian, ne glede na njen primer.

$ egrep -i ime datoteke "search_string"

Ogledate si lahko, kako mi je zastavica -i pomagala pri pridobivanju vseh vrstic, ki vsebujejo iskalni niz, skozi "neobčutljivo" iskanje.

Primer 5: Iskanje niza kot celotne besede in ne kot podniza

Ko običajno iščete niz prek egrepa, natisne vse besede, ki vsebujejo niz, kot podniz. Če na primer poiščemo niz »on«, bodo natisnjene vse besede, ki vsebujejo niz »on«, na primer »on«, »only«, »monitor«, »clone« itd. Če želite, da rezultati prikazujejo samo besedo "on" kot celotno besedo in ne kot podniz, lahko uporabite zastavico -w z egrep.

Sintaksa:

$ egrep -w ime datoteke "search_string"

Primer:

Tu iščem niz »on« v vzorčni datoteki:

$ egrep -i “on” samplefile.txt

V zgornjem izhodu lahko vidite, da vsebuje tudi besedo »samo«. Vendar to ni tisto, kar si želim, saj iščem izključno besedo "on". Torej, to je ukaz, ki ga bom raje uporabil:

$ egrep -iw “on” samplefile.txt

Zdaj moji rezultati iskanja vključujejo samo vrstice, ki vsebujejo besedo "on" kot celotno besedo.

Primer 6: Tiskanje samo imen datotek, ki vsebujejo niz

Včasih želimo le pridobiti imena datotek, ki vsebujejo določen niz, namesto da bi natisnili vrstice, ki ga vsebujejo. To lahko storite z uporabo zastavice -l (male črke L) z ukazom egrep.

Sintaksa:

$ egrep -l "vzorec_izvedbe" ime_vzorca datoteke

Primer:

Tu iščem niz »vzorec« v vseh .datoteke txt v trenutnem imeniku:

$ egrep -l vzorec *.txt

Rezultati iskanja natisnejo samo imena datotek, ki vsebujejo določen niz.

7. primer: Tiskanje samo iskalnega niza iz datoteke

Namesto da natisnete celotno vrstico, ki vsebuje iskalni niz, lahko z ukazom egrep natisnete niz. Niz se natisne, kolikokrat se pojavi v določeni datoteki.

Sintaksa:

$ egrep -o ime datoteke "search_string"

Primer:

V tem primeru iščem besedo "To" v svoji datoteki.

$ egrep -o Ta vzorčna datoteka_.txt

Opomba: Ta uporaba ukaza je priročna, ko iščete niz, ki temelji na vzorcu regularnega izraza. Regularne izraze bomo podrobno razložili v enem od naslednjih primerov.

Primer 8: Prikaz n števila vrstic pred, za ali okoli iskalnega niza

Včasih je zelo pomembno poznati kontekst v datoteki, kjer se uporablja določen niz. Egrep je priročen v smislu, da se z njim lahko prikaže vrstica, ki vsebuje iskalni niz, in tudi določeno število vrstic pred, za in okoli njega.

To je vzorčna besedilna datoteka, ki jo bom uporabil za razlago prihodnjih primerov:

N število vrstic Po iskalnem nizu:

Uporaba zastavice A na naslednji način bo prikazala vrstico, ki vsebuje iskalni niz in N število vrstic za njim:

$ egrep -A ime datoteke "search_string"

Primer:

$ egrep -A 2 "sample" samplefile.txt

N število vrstic pred iskalnim nizom:

Uporaba zastavice B na naslednji način bo prikazala vrstico, ki vsebuje iskalni niz in N število vrstic pred njim:

$ egrep -B ime datoteke "search_string"

Primer:

$ egrep -B 2 "sample" samplefile.txt

N število vrstic pred iskalnim nizom:

Uporaba zastavice C na naslednji način bo prikazala vrstico, ki vsebuje iskalni niz, in N število vrstic pred in za njim:

$ egrep -C ime datoteke "search_string"

Primer:

$ egrep -C 2 "sample" samplefile.txt

Primer 9: Ujemanje regularnega izraza v datotekah

Ukaz egrep postane močnejši, ko iščete regularne izraze namesto trdnih iskalnih nizov v datoteki.

Sintaksa:

$ egrep "RegularExpressions" ime datoteke

Pojasnite nam, kako lahko pri iskanju egrep uporabljate regularne izraze:

Operator ponavljanja Uporaba
? Prejšnja točka prej ? ni obvezna in se ujema največ enkrat

* Prejšnji element pred * se bo ujemal nič ali večkrat
+ Prejšnji element pred + se bo ujemil enkrat ali večkrat
n Prejšnji element se natančno ujema n-krat.
n, Prejšnji element se ujema n ali večkrat
, m Prejšnji element se ujema največ m-krat
n, m Prejšnji element se ujema vsaj n-krat, vendar ne več kot m-krat

Primer:

V naslednjem primeru se ujemajo vrstice, ki vsebujejo naslednji izraz:

začenši z “Gnome” in konča na “programi”

Primer 10: Označevanje iskalnega niza

Ko spremenljivko okolja GREP_OPTIONS nastavite spodaj, dobite izhod z iskalnim nizom / vzorcem, označenim v rezultatih:

$ sudo export GREP_OPTIONS = '- color = auto' GREP_COLOR = '100; 8'

Nato lahko niz poiščete na kakršen koli način, ki smo ga opisali v primerih tega članka.

Primer 11: Izvajanje invertiranega iskanja v datoteki

Z invertiranim iskanjem mislimo, da ukaz egrep natisne vse v datoteki, razen vrstic, ki vsebujejo iskalni niz. Naslednjo vzorčno datoteko bomo uporabili za razlago invertnega iskanja prek egrepa. Vsebino datoteke smo natisnili z ukazom cat:

Sintaksa:

$ egrep -v ime datoteke "search_string"

Primer:

Iz vzorčne datoteke, ki smo jo omenili, želimo v izhodu izpustiti vrstico, ki vsebuje besedo "dva", zato bomo uporabili naslednji ukaz:

$ egrep -v "dva" samplefile_.txt

Vidite lahko, kako izhod vsebuje vse iz vzorčne datoteke, razen druge vrstice, ki je vsebovala iskalni niz »dva«.

Primer 12: Izvedba obrnjenega iskanja na podlagi več meril / vzorca iskanja

Z zastavico -v lahko naredite tudi ukaz egrep za izvajanje obrnjenega iskanja na podlagi več kot enega iskalnega niza / vzorca.

Za razlago tega scenarija bomo uporabili isto vzorčno datoteko, ki smo jo omenili v primeru 11.

Sintaksa:

$ egrep -v -e "search_string" / ”vzorec” -e "search_string" / ”vzorec”
… Ime datoteke

Primer:

Iz vzorčne datoteke, ki smo jo omenili, želimo v izhodu izpustiti vrstice, ki vsebujejo besedi "ena" in "dve", zato bomo uporabili naslednji ukaz:

$ egrep -v -e “one” -e “two” samplefile_.txt

Z zastavico -e smo navedli dve besedi, ki ju bomo izpustili, zato bo rezultat prikazan na naslednji način:

Primer 13: Tiskanje števila vrstic, ki se ujemajo z iskalnim nizom

Namesto da bi iskali iskani niz iz datoteke ali vrstic, ki jo vsebujejo, lahko z ukazom egrep preštejete in natisnete število vrstic, ki se ujemajo z nizom. To štetje je mogoče pridobiti z zastavico -c z ukazom egrep.

Sintaksa:

$ egrep -c ime datoteke "search_string"

Primer:

V tem primeru bomo z zastavico -c prešteli število vrstic, ki vsebujejo besedo »To« v naši vzorčni datoteki:

$ egrep -c "To" ime datoteke

Tu lahko uporabite tudi funkcijo obrnjenega iskanja za štetje in tiskanje števila vrstic, ki ne vsebujejo iskalnega niza: 

$ grep -v -c ime datoteke "search_string"

Primer 14: Prikaz številke vrstice, kjer se niz ujema

Z zastavico -n lahko naredite ukaz egrep za tiskanje ujemajoče se vrstice skupaj s številko vrstice, ki vsebuje iskalni niz.

Sintaksa:

$ grep -n ime datoteke "search_string"

Primer:

$ grep -n "Ta" samplefile_.txt

Ogledate si lahko, kako so številke vrstic prikazane glede na rezultate iskanja.

Primer 15: Prikaz položaja v datoteki, kjer se iskalni niz ujema

Če želite vedeti položaj v datoteki, kjer obstaja iskalni niz, lahko uporabite zastavico -b z ukazom egrep.

$ grep -o -b "ime_izvedbe"

Primer:

$ grep -o -b "Ta" samplefile_.txt

Rezultati iskanja natisnejo odmik bajta datoteke, v kateri obstaja iskalna beseda.To je bila podrobna uporaba ukaza egrep. S kombinacijo zastavic, razloženih v tem članku, lahko v datotekah izvedete bolj smiselna in zapletena iskanja.

Kako uporabljati AutoKey za avtomatizacijo iger Linux
AutoKey je namizni pripomoček za avtomatizacijo za Linux in X11, programiran v Python 3, GTK in Qt. Z njegovo funkcijo skriptiranja in MACRO lahko avt...
Kako prikazati števec FPS v igrah Linux
Linux gaming je dobil velik zagon, ko je Valve leta 2012 napovedal podporo Linuxu za odjemalca Steam in njihove igre. Od takrat se je veliko AAA in in...
Kako prenesti in igrati Sid Meier's Civilization VI v Linuxu
Uvod v igro Civilization 6 je sodoben pogled na klasični koncept, uveden v seriji iger Age of Empires. Ideja je bila dokaj preprosta; začeli bi v zelo...