Har du brukt grep før? Det meste av tiden kan det grunnleggende grep-trikset gjøre det meste av jobben. Grep tilbyr imidlertid mange måter å utføre søket på og finjustere utdataene til en mer brukbar versjon. I denne artikkelen, la oss sjekke ut bruken av grep-kommandoen.
Grep bruk
Bekreftende eksistens
Hvis du kjører noen form for Linux-distro, har du allerede grep installert. Kjør følgende kommando i terminalen.
grep - versjon
Denne kommandoen brukes til å vise versjonen av installert grep. Nå trenger vi en demofil. I mitt tilfelle genererer jeg en tekstfil som inkluderer alle de installerte pakkene på systemet mitt.
Grunnleggende
Den grunnleggende bruken av grep følger følgende struktur.
grepEller for å gjøre det lettere å forstå, bruk denne.
grepI dette tilfellet vil grep utføre et søk i filen og skrive ut alle linjene som inkluderer mønsteret (søkeord).
grep python ~ / Desktop / PackageList.tekst
Grep søkte i filen “PackageList.txt ”Jeg genererte tidligere og skrev ut alle linjene som inkluderer“ python ”.
Den samme operasjonen kan utføres på en annen måte. Ta en titt på følgende eksempel.
cat ~ / Desktop / PackageList.txt | grep python
Her sendte jeg innholdet i filen "PackageList" ved hjelp av "cat" -kommandoen.txt ”til grep. Ved å bruke utdataene fra cat utførte grep søket og skrev ut linjene som inneholder søkeordet.
Nå kommer en morsom ting. Du kan bokstavelig talt stable flere grep-kommandoer akkurat slik.
cat ~ / Desktop / PackageList.txt | grep - | grep p | grep python
Den første grep filtrerer ned til linjene med en bindestrek, det andre filteret ned til linjene med p, og den siste grep filtrerer ned til linjene med python. Gir mening?
Saksfølsomhet
Når du utfører et søk, er saksfølsomhet et stort spørsmål. Som standard er grep skiftesensitiv.
Hvis du for eksempel søker etter "Python" ikke viser noe resultat.
cat ~ / Desktop / PackageList.txt | grep Python
For å gjøre grep-bokstaven "ufølsom", legg til følgende alternativ.
cat ~ / Desktop / PackageList.txt | grep -i Python
Filsøk
La oss si at du har en katalog med mange tekstfiler. Målet ditt er å identifisere filen (e) som inneholder eller ikke inneholder et mønster (søkeord).
Jeg synes denne metoden er ganske nyttig når jeg søker i en haug med loggfiler. Siden jeg ikke har tid til å åpne og sjekke hver eneste fil manuelt, har jeg grep til å gjøre jobben for meg.
For å liste opp filer som inneholder samsvar, bruk “-l” -flagget.
grep -l
Som resultatet antyder, er begrepet "python" til stede i alle de 3 filene som er tilstede i "Desktop" -katalogen.
For å liste opp filer uten samsvar, bruk “-L” -flagget.
grep -L
"Ingen treff.txt ”er den eneste filen som ikke inneholder begrepet“ python ”.
Invertert søk
Standard oppførsel for grep er å skrive ut bare linjene med det matchende mønsteret, til høyre? Det er på tide å snu prosessen. Denne gangen skriver vi bare ut linjene UTEN det matchende mønsteret.
Bare gi alternativet “-v” til grep.
cat ~ / Desktop / PackageList.txt | grep -i -v Python
Skrive ut linjer før / etter kampen
Som standard vil grep bare skrive ut linjen som samsvarer med søkemønsteret. Ved hjelp av denne teknikken kan du fortelle grep å skrive ut linjer før / etter kampen også.
Bruk følgende struktur for å skrive ut linjer før kampen.
grep -B
Her er 5 talllinjen som grep vil skrive ut FØR den matchende linjen.
For å skrive ut linjer etter kampen, bruk følgende.
grep -A
Hva med å skrive ut både før og etter matchende linje? I så fall bruker du “-C” -flagget.
grep -C
Linjenummer
Når grep viser utdataene, nevner det ikke linjenummeret. For tilhørende linjenummer (er), bruk “-n” flagget.
grep -n
Enkelt ord
Hvis flagget “-w” brukes, vil grep behandle mønsteret som et helt ord.
grep -w
Begrensende grep-søk
Grep tillater å spesifisere antall linjer som skal søkes i filen. Denne metoden er nyttig hvis du har å gjøre med en stor fil (som systemlogg). Bruk flagget “-m”.
grep -m
Rekursivt søk
Det er en av de mest nyttige funksjonene grep tilbyr for tung bruk. Grep kan søke rekursivt i en katalog og finne alle treffene fra alle filene den står overfor.
grep -REller,
grep -r
Jeg finner ofte å bruke denne rekursive funksjonen sammen med “-l” -flagget.
Stillemodus
Grep kan kjøres i "stille" modus. Når du kjører i "stille" modus, vil ikke grep skrive ut noen utdata til terminalen. I stedet vil den returnere 0 (i det minste ble det funnet en kamp) eller 1 (ingen treff funnet).
grep -qekko $?
Regex
Grep tillater også regex-søk (regulært uttrykk). Dette legger til et helt nytt nivå av kompleksitet og brukbarhet av grep som et søkeverktøy.
For eksempel kan du bruke parenteser for å søke etter både "for" og "to" samtidig.
cat ~ / Desktop / gpl-3.0.txt | grep t [wo] o
Dette neste eksemplet vil bare skrive ut linjen hvis kampen skjer helt på begynnelsen av linjen.
grep ^ GNU ~ / Desktop / gpl-3.0.tekst
Når det gjelder å matche slutten, bruk denne.
grep deg $ ~ / Desktop / gpl-3.0.tekst
Hvis du vil bruke Perl regex, bruker du “-P” -flagget. Det vil behandle mønsteret som Perl regex.
grep -PSiste tanker
Grep tilbyr mange måter å tilpasse søkefunksjonen på. Tilgjengeligheten av regex låser opp en helt ny horisont for potensiell bruk av grep. Det kule er at du kan bruke både generell og Perl regex; uansett hva du føler deg komfortabel med.
For den mest detaljerte forklaringen, se alltid mannssiden.
mann grep
Jubel!