Egrep kommandoen hører til familien af grep kommandoen, som bruges til at søge efter mønstre i Linux. Hvis du har brugt grep-kommandoen, fungerer egrep på samme måde som grep -E (grep Extended regex’) gør. Egrep scanner en bestemt fil linje for linje og udskriver de(n) linje(r), der indeholder den søgestreng/det regelmæssige udtryk, der søges efter. I denne artikel vil vi forklare 15 nyttige eksempler på egrep-kommandoer, som vil hjælpe nybegyndere og selv eksperter med at udføre meningsfulde søgninger i LinuxVi har udført disse eksempler på et Debian 10 Buster-system, men de kan nemt kopieres på de fleste Linux-distroer.
- Eksempel 1: Søgning efter en specifik streng i en fil
- Eksempel 2: Søgning efter en bestemt streng i flere filer
- Eksempel 3: Rekursiv søgning efter strengen i hele mappen
- Eksempel 4: Udførelse af en søgning, der ikke tager hensyn til store og små bogstaver
- Eksempel 5: Søgning efter en streng som et helt ord og ikke som en delstreng
- Eksempel 6: Udskrivning af kun de filnavne, der indeholder strengen
- Eksempel 7: Udskrivning kun af søgestrengen fra en fil
- Eksempel 8: Visning af n antal linjer før,efter eller omkring søgestrengen
- Eksempel 9: Matchende regulære udtryk i filer
- Eksempel 10: Fremhævning af søgestrengen
- Eksempel 11: Udførelse af inverteret søgning i en fil
- Eksempel 12: Udførelse af omvendt søgning baseret på flere kriterier/søgemønstre
- Eksempel 13: Udskrivning af antallet af linjer, der matcher den søgte streng
- Eksempel 14: Visning af linjenummeret, hvor strengen er matchet
- Eksempel 15: Visning af positionen i filen, hvor søgestrengen passer
Eksempel 1: Søgning efter en specifik streng i en fil
Dette er den mest almindelige anvendelse af egrep-kommandoen. Det, du gør, er, at du angiver en streng, som du vil søge efter, og det filnavn, som du vil slå denne streng op i. Resultatet viser så hele den linje, der indeholder den søgte streng.
Syntaks:
Eksempel:
I dette eksempel søgte jeg efter ordet “debian” i den angivne tekstfil. Du kan se, hvordan resultaterne viser hele den linje, der indeholder ordet “debian”:
Eksempel 2: Søgning efter en bestemt streng i flere filer
Med egrep-kommandoen kan du søge efter en streng blandt flere filer, der ligger i den samme mappe. Du skal bare være lidt mere specifik ved at angive et “mønster” for de søgte filer. Dette vil blive mere klart med det eksempel, vi vil præsentere.
Syntaks:
Eksempel:
Her vil vi søge efter ordet “debian” i alle de .txt-filer ved at angive filnavnemønsteret på følgende måde:
Kommandoen har udskrevet alle linjerne sammen med de filnavne, der indeholder ordet “debian” fra alle .txt-filer i den aktuelle mappe.
Eksempel 3: Rekursiv søgning efter strengen i hele mappen
Når du ønsker at søge efter en streng i alle filerne fra en mappe og dens undermapper, kan du gøre det ved at bruge -r-flaget med egrep-kommandoen.
Syntaks:
Eksempel:
I dette eksempel søger jeg efter ordet “sample” i filerne i hele den aktuelle(Downloads)-mappe.
Resultaterne indeholder alle de linjer, sammen med filnavne, der indeholder ordet “sample” fra alle filer i mappen Downloads og dens undermapper.
Eksempel 4: Udførelse af en søgning, der ikke tager hensyn til store og små bogstaver
Med flaget -i kan du bruge egrep-kommandoen til at udskrive resultaterne baseret på en søgestreng uden at skulle bekymre dig om dens store og små bogstaver.
Syntaks:
Eksempel:
Her søger jeg efter ordet “debian”, og jeg ønsker, at resultaterne skal vise alle de linjer fra filen, der indeholder ordet “debian” eller “Debian”, uanset dets store og små bogstaver.
Du kan se, hvordan -i-flaget hjalp mig med at hente alle de linjer, der indeholder søgestrengen gennem en case “insensitiv” søgning.
Eksempel 5: Søgning efter en streng som et helt ord og ikke som en delstreng
Når du normalt søger efter en streng gennem egrep, udskriver den alle de ord, der indeholder strengen som en delstreng. Hvis du f.eks. søger efter strengen “on”, vil du udskrive alle de ord, der indeholder strengen “on”, som ” on”, “only”, “monitor”, “clone” osv. Hvis du ønsker, at resultaterne kun skal vise ordet “on” som et helt ord og ikke som en delstreng, kan du bruge -w-flaget med egrep.
Syntaks:
Eksempel:
Her søger jeg efter strengen “on” i en prøvefil:
Du kan se i ovenstående output, at den også indeholder ordet “only”. Det er dog ikke det, jeg ønsker, da jeg udelukkende leder efter ordet “on”. Så dette er den kommando, jeg vil bruge i stedet:
Nu omfatter mine søgeresultater kun de linjer, der indeholder ordet “on” som et helt ord.
Sommetider ønsker vi kun at hente de filnavne, der indeholder en bestemt streng, i stedet for at udskrive de linjer, der indeholder den. Dette kan gøres ved hjælp af flaget -l (lille L) med egrep-kommandoen.
Syntaks:
Eksempel:
Her søger jeg efter strengen “sample” i alle .txt-filer i den aktuelle mappe:
Søgeresultaterne udskriver kun navnet på de filer, der indeholder den angivne streng.
Eksempel 7: Udskrivning kun af søgestrengen fra en fil
I stedet for at udskrive hele den linje, der indeholder søgestrengen, kan du bruge egrep-kommandoen til at udskrive selve strengen. Strengen vil blive udskrevet det antal gange, den optræder i den angivne fil.
Syntaks:
Eksempel:
I dette eksempel søger jeg efter ordet “This” i min fil.
Bemærk: Denne brug af kommandoen er praktisk, når du søger efter en streng baseret på et mønster med regulære udtryk. Vi vil forklare regulære udtryk i detaljer i et af de kommende eksempler.
Eksempel 8: Visning af n antal linjer før,efter eller omkring søgestrengen
Sommetider er det meget vigtigt at kende konteksten i en fil, hvor en bestemt streng bruges. egrep er praktisk i den forstand, at den kan bruges til at vise den linje, der indeholder søgestrengen, og også et bestemt antal linjer før, efter og omkring den.
Dette er den eksempeltekstfil, som jeg vil bruge til at forklare de kommende eksempler:
N antal linjer Efter søgestrengen:
Ved anvendelse af A-flaget på følgende måde vises den linje, der indeholder søgestrengen, og N antal linjer efter den:
Eksempel:
N antal linjer Før søgestrengen:
Ved anvendelse af B-flaget på følgende måde vises den linje, der indeholder søgestrengen, og N antal linjer før den:
Eksempel:
N antal linjer Før søgestrengen:
Hvis du bruger C-flaget på følgende måde, vises den linje, der indeholder søgestrengen, og N antal linjer før og efter den:
Eksempel:
Eksempel 9: Matchende regulære udtryk i filer
Egrep-kommandoen bliver mere kraftfuld, efterhånden som du søger efter regulære udtryk i stedet for faste søgestrenge i en fil.
Syntaks:
Lad os forklare, hvordan du kan bruge Regular Expressions i din egrep-søgning:
Repetition operator | Use |
? | Den foregående post før ? er valgfri og matches højst én gang |
* | Den forudgående post før * matches nul eller flere gange |
+ | Den forudgående post før + vil blive matchet en eller flere gange |
{n} | Den forudgående post bliver matchet nøjagtigt n antal gange. |
{n,} | Det foregående element matches n eller flere gange |
{,m} | Det foregående element matches maksimalt m gange |
{n,m} | Den foregående post er matchet mindst n gange, men højst m gange |
Eksempel:
I det følgende eksempel matches de linjer, der indeholder følgende udtryk:
begyndende med “Gnome” og sluttende med ” programs”
Eksempel 10: Fremhævning af søgestrengen
Når du indstiller miljøvariablen GREP_OPTIONS som nedenfor, får du dit output med søgestrengen/mønsteret fremhævet i resultaterne:
Du kan derefter søge efter strengen på en hvilken som helst måde, som vi har beskrevet i eksemplerne i denne artikel.
Eksempel 11: Udførelse af inverteret søgning i en fil
Med inverteret søgning mener vi, at egrep-kommandoen udskriver alt i filen, undtagen de linjer, der indeholder søgestrengen. Vi vil bruge følgende eksempelfil til at forklare invertsøgning gennem egrep. Vi har udskrevet indholdet af filen ved hjælp af kommandoen cat:
Syntaks:
Eksempel:
Fra den nævnte eksempelfil ønsker vi at udelade den linje, der indeholder ordet “to” i output, derfor vil vi bruge følgende kommando:
Du kan se, hvordan outputtet indeholder alt fra prøvefilen undtagen den anden linje, der indeholdt søgestrengen “to”.
Eksempel 12: Udførelse af omvendt søgning baseret på flere kriterier/søgemønstre
Med -v-flaget kan du også få egrep-kommandoen til at udføre en omvendt søgning baseret på mere end én søgestreng/søgemønster.
Vi vil bruge den samme prøvefil, som vi nævnte i eksempel 11, til at forklare dette scenarie.
Syntaks:
…. filnavn
Eksempel:
Fra den nævnte prøvefil ønsker vi at udelade den eller de linjer, der indeholder ordene “one” og “two” i output, derfor vil vi bruge følgende kommando:
Vi har angivet to ord, der skal udelades ved hjælp af -e-flaget, og derfor vil outputtet se ud som følger:
Eksempel 13: Udskrivning af antallet af linjer, der matcher den søgte streng
I stedet for at udskrive den søgte streng fra filen eller de linjer, der indeholder den, kan du bruge egrep-kommandoen til at tælle og udskrive antallet af linjer, der matcher strengen. Denne optælling kan hentes ved hjælp af -c-flaget med egrep-kommandoen.
Syntaks:
Eksempel:
I dette eksempel vil vi bruge -c-flaget til at tælle antallet af linjer, der indeholder ordet “This” i vores eksempelfil:
Du kan også bruge funktionen inverteret søgning her for at tælle og udskrive antallet af linjer, der ikke indeholder søgestrengen:
Eksempel 14: Visning af linjenummeret, hvor strengen er matchet
Med -n-flaget kan du få egrep-kommandoen til at udskrive den matchede linje sammen med det linjenummer, der indeholder søgestrengen.
Syntaks:
Eksempel:
Du kan se, hvordan linjenumrene vises i forhold til søgeresultaterne.
Eksempel 15: Visning af positionen i filen, hvor søgestrengen passer
Hvis du ønsker at kende positionen i filen, hvor søgestrengen findes, kan du bruge -b-flaget med egrep-kommandoen.
Eksempel:
Søgeresultaterne udskriver byteforskydningen i den fil, hvor søgeordet findes.Dette var en detaljeret brug af egrep-kommandoen. Ved at bruge en kombination af de flag, der er forklaret i denne artikel, kan du udføre mere meningsfulde og komplekse søgninger på dine filer.