Har du brugt grep før? Det meste af tiden kan det grundlæggende grep-trick gøre det meste af arbejdet. Grep tilbyder dog mange måder at udføre søgningen på og finjustere output til en mere brugbar version. Lad os i denne artikel tjekke brugen af kommandoen grep.
Grep brug
Bekræftelse af eksistens
Hvis du kører nogen form for Linux-distro, har du allerede grep installeret. Kør følgende kommando i terminalen.
grep --version
Denne kommando bruges til at vise versionen af aktuelt installeret grep. Nu har vi brug for en demo-fil. I mit tilfælde genererer jeg en tekstfil, der indeholder alle de installerede pakker på mit system.
Grundlæggende
Den grundlæggende anvendelse af grep følger følgende struktur.
grepEller for at gøre det lettere at forstå, brug denne.
grepI dette tilfælde udfører grep en søgning i filen og udskriver alle de linjer, der inkluderer mønsteret (søgeudtryk).
grep python ~ / Desktop / PackageList.txt
Grep søgte i filen “PackageList.txt ”Jeg genererede tidligere og udskrev alle linjer, der inkluderer“ python ”.
Den samme operation kan udføres på en anden måde. Tjek følgende eksempel.
cat ~ / Desktop / PackageList.txt | grep python
Her sendte jeg indholdet af filen "PackageList" ved hjælp af kommandoen "cat".txt ”til grep. Ved hjælp af output fra kat udførte grep søgningen og udskrev de linjer, der indeholder søgeudtrykket.
Nu kommer en sjov ting. Du kan bogstaveligt talt stable flere grep-kommandoer sådan.
cat ~ / Desktop / PackageList.txt | grep - | grep p | grep python
Den første grep filtrerer ned til linjerne med en bindestreg, det andet filter ned til linjerne med p, og den sidste grep filtrerer ned til linjerne med python. Giver mening?
Sagsfølsomhed
Når du udfører en søgning, er sagsfølsomhed et stort spørgsmål. Som standard er grep store og små bogstaver.
For eksempel viser søgning efter “Python” ikke noget resultat.
cat ~ / Desktop / PackageList.txt | grep Python
For at gøre grep til "ufølsom" skal du tilføje følgende mulighed.
cat ~ / Desktop / PackageList.txt | grep -i Python
Fil søgning
Lad os sige, at du har et bibliotek med mange tekstfiler. Dit mål er at identificere de filer, der indeholder eller ikke indeholder et mønster (søgeudtryk).
Jeg finder denne metode ret nyttig, når jeg søger i en bunke med logfiler. Da jeg ikke har tid til at åbne og kontrollere hver enkelt fil manuelt, har jeg grep til at gøre jobbet for mig.
Brug “-l” -flaget til at liste filer, der indeholder matchet.
grep -l
Som resultatet antyder, er udtrykket "python" til stede i alle 3 filer, der findes i "Desktop" -mappen.
Brug “-L” flag til at liste filer uden nogen match.
grep -L
"Intet match.txt ”er den eneste fil, der ikke indeholder udtrykket“ python ”.
Inverteret søgning
Standarden for grep er kun at udskrive linjerne med det matchende mønster, højre? Det er tid til at vende processen. Denne gang udskriver vi kun linjerne UDEN det matchende mønster.
Bare send "-v" indstillingen til grep.
cat ~ / Desktop / PackageList.txt | grep -i -v Python
Udskrivning af linjer før / efter kampen
Som standard udskriver grep kun den linje, der matcher søgemønsteret. Ved hjælp af denne teknik kan du også fortælle grep at udskrive linjer før / efter kampen.
Brug følgende struktur til at udskrive linjer før kampen.
grep -B
Her er 5 den tallinje, som grep udskriver FØR den matchende linje.
Brug følgende til udskrivning af linjer efter kampen.
grep -A
Hvad med at udskrive både før og efter den matchende linje? I så fald skal du bruge “-C” -flagget.
grep -C
Linjenummer
Når grep viser output, nævnes det ikke linjenummeret. For de tilknyttede linjenumre skal du bruge “-n” flag.
grep -n
Enkelt ord
Hvis flaget “-w” bruges, behandler grep mønsteret som et helt ord.
grep -w
Begrænsning af grep-søgning
Grep tillader at specificere antallet af linjer, der skal søges i filen. Denne metode er nyttig, hvis du har at gøre med en stor fil (som systemlog). Brug flaget “-m”.
grep -m
Rekursiv søgning
Det er en af de mest nyttige funktioner, som grep tilbyder til tung brug. Grep kan søge rekursivt i et bibliotek og finde alle matches fra alle de filer, det står over for.
grep -REller,
grep -r
Jeg finder ofte brugen af denne rekursive funktion sammen med “-l” -flagget.
Stille tilstand
Grep kan køres i “stille” tilstand. Når du kører i "stille" tilstand, udskriver grep ikke noget output til terminalen. I stedet returnerer den 0 (i det mindste blev der fundet et match) eller 1 (ingen match fundet).
grep -qekko $?
Regex
Grep tillader også regex-søgninger (regulært udtryk). Dette tilføjer et helt nyt niveau af kompleksitet og anvendelighed af grep som et søgeværktøj.
For eksempel kan du bruge parenteser til at søge efter både "også" og "to" på samme tid.
kat ~ / Desktop / gpl-3.0.txt | grep t [wo] o
Dette næste eksempel udskriver kun linjen, hvis kampen finder sted i begyndelsen af linjen.
grep ^ GNU ~ / Desktop / gpl-3.0.txt
Brug denne til at matche slutningen.
grep dig $ ~ / Desktop / gpl-3.0.txt
Hvis du vil bruge Perl regex, skal du bruge “-P” -flagget. Det vil behandle mønsteret som Perl regex.
grep -PAfsluttende tanker
Grep tilbyder mange måder at tilpasse søgefunktionen på. Tilgængeligheden af regex låser op for en helt ny horisont for potentiel brug af grep. Det seje er, at du kan bruge både generel og Perl regex; uanset hvad du har det godt med.
For den mest detaljerede forklaring, se altid mandsiden.
mand grep
Skål!