Egrep-kommandot tillhör samma familj som grep-kommandot som används för att söka efter mönster i Linux. Om du har använt kommandot grep fungerar egrep på samma sätt som grep -E (grep Extended regex’) gör. Egrep genomsöker en specifik fil, rad för rad, och skriver ut den eller de rader som innehåller söksträngen/det reguljära uttrycket. I den här artikeln kommer vi att förklara 15 användbara exempel på egrep-kommandon som hjälper nybörjare och även experter att utföra meningsfulla sökningar i LinuxVi har utfört de här exemplen på ett Debian 10 Buster-system, men de kan enkelt replikeras på de flesta Linux-distributioner.
- Exempel 1: Sökning efter en specifik sträng i en fil
- Exempel 2: Sökning efter en specifik sträng i flera filer
- Exempel 3: Rekursivt sökning av strängen i hela katalogen
- Exempel 4: Utföra en sökning som inte tar hänsyn till stor- och småskalighet
- Exempel 5: Sökning efter en sträng som ett helt ord och inte som en delsträng
- Exempel 6: Utskrift av endast de filnamn som innehåller strängen
- Exempel 7: Utskrift av endast söksträngen från en fil
- Exempel 8: Visa n antal rader före, efter eller runt söksträngen
- Exempel 9: Matcha reguljära uttryck i filer
- Exempel 10: Markering av söksträngen
- Exempel 11: Utföra inverterad sökning i en fil
- Exempel 12: Utföra inverterad sökning baserad på flera kriterier/sökmönster
- Exempel 13: Utskrift av antalet rader som stämmer överens med söksträngen
- Exempel 14: Visa radnumret där strängen matchas
- Exempel 15: Visar positionen i filen där söksträngen matchar
Exempel 1: Sökning efter en specifik sträng i en fil
Det här är det vanligaste användningsområdet för egrep-kommandot. Det du gör är att du anger en sträng som du vill söka efter och filnamnet som du vill leta upp strängen i. Resultatet visar sedan hela raden som innehåller den sökta strängen.
Syntax:
Exempel:
I detta exempel sökte jag efter ordet ”debian” i den angivna textfilen. Du kan se hur resultaten visar hela raden som innehåller ordet ”debian”:
Exempel 2: Sökning efter en specifik sträng i flera filer
Med kommandot egrep kan du söka efter en sträng bland flera filer som finns i samma katalog. Du måste bara vara lite mer specifik när du anger ett ”mönster” för de sökta filerna. Detta kommer att bli tydligare med det exempel vi kommer att presentera.
Syntax:
Exempel:
Här kommer vi att söka efter ordet ”debian” i alla .txt-filer genom att ange filnamnsmönstret på följande sätt:
Kommandot har skrivit ut alla rader, tillsammans med de filnamn som innehåller ordet ”debian” från alla .txt-filer i den aktuella katalogen.
Exempel 3: Rekursivt sökning av strängen i hela katalogen
När du vill söka efter en sträng i alla filer från en katalog och dess underkataloger kan du göra det genom att använda flaggan -r med egrep-kommandot.
Syntax:
Exempel:
I det här exemplet söker jag efter ordet ”sample” i filerna i hela den aktuella (Downloads) katalogen.
Resultaten innehåller alla rader, tillsammans med filnamnen, som innehåller ordet ”sample” från alla filer i katalogen Downloads och dess underkataloger.
Exempel 4: Utföra en sökning som inte tar hänsyn till stor- och småskalighet
Med flaggan -i kan du använda egrep-kommandot för att skriva ut resultaten baserat på en söksträng utan att behöva oroa dig för dess stor- och småskalighet.
Syntax:
Exempel:
Här söker jag efter ordet ”debian” och jag vill att resultaten ska visa alla rader från filen som innehåller ordet ”debian” eller ”Debian”, oavsett dess versal.
Du kan se hur flaggan -i hjälpte mig att hämta alla rader som innehåller söksträngen genom en ”okänslig” sökning med avseende på storleken.
Exempel 5: Sökning efter en sträng som ett helt ord och inte som en delsträng
När du normalt söker efter en sträng genom egrep skrivs alla ord som innehåller strängen som en delsträng ut. Om du till exempel söker efter strängen ”on” kommer du att skriva ut alla ord som innehåller strängen ”on” som ” on”, ”only”, ”monitor”, ”clone” osv. Om du vill att resultaten endast ska visa ordet ”on” som ett helt ord och inte som en delsträng kan du använda flaggan -w med egrep.
Syntax:
Exempel:
Här söker jag efter strängen ”on” i en exempelfil:
Du kan se i ovanstående utdata att den också innehåller ordet ”only”. Detta är dock inte vad jag vill ha eftersom jag uteslutande letar efter ordet ”on”. Så det här kommandot kommer jag att använda istället:
Nu innehåller mina sökresultat endast de rader som innehåller ordet ”on” som ett helt ord.
Exempel 6: Utskrift av endast de filnamn som innehåller strängen
Ibland vill vi endast hämta de filnamn som innehåller en viss sträng, i stället för att skriva ut de rader som innehåller strängen. Detta kan göras med hjälp av flaggan -l (L med liten bokstav) med kommandot egrep.
Syntax:
Exempel:
Här söker jag efter strängen ”sample” i alla .txt-filer i den aktuella katalogen:
Sökresultaten skriver bara ut namnet på de filer som innehåller den angivna strängen.
Exempel 7: Utskrift av endast söksträngen från en fil
Istället för att skriva ut hela raden som innehåller söksträngen kan du använda egrep-kommandot för att skriva ut själva strängen. Strängen skrivs ut det antal gånger den förekommer i den angivna filen.
Syntax:
Exempel:
I det här exemplet söker jag efter ordet ”This” i min fil.
Anmärkning: Den här användningen av kommandot är praktisk när du söker efter en sträng utifrån ett mönster för reguljära uttryck. Vi kommer att förklara reguljära uttryck i detalj i ett av de kommande exemplen.
Exempel 8: Visa n antal rader före, efter eller runt söksträngen
Ibland är det mycket viktigt att känna till sammanhanget i en fil där en viss sträng används. egrep kommer väl till pass i det avseendet att det kan användas för att visa den rad som innehåller söksträngen och även ett visst antal rader före, efter och runt den.
Detta är den exempeltextfil som jag kommer att använda för att förklara de kommande exemplen:
N antal rader Efter söksträngen:
Om du använder flaggan A på följande sätt visas raden som innehåller söksträngen och N antal rader efter den:
Exempel:
N antal rader före söksträngen:
Användning av B-flaggan på följande sätt visar den rad som innehåller söksträngen och N antal rader före den:
Exempel:
N antal rader Före söksträngen:
Användning av C-flaggan på följande sätt visar den rad som innehåller söksträngen och N antal rader före och efter den:
Exempel:
Exempel 9: Matcha reguljära uttryck i filer
Egrep-kommandot blir mer kraftfullt när du söker efter reguljära uttryck i stället för fasta söksträngar i en fil.
Syntax:
Låt oss förklara hur du kan använda reguljära uttryck i din egrep-sökning:
Repetition operator | Use |
? | Den föregående punkten före ? är valfri och matchas högst en gång |
* | Den föregående punkten före * matchas noll eller flera gånger |
+ | Den föregående punkten före + matchas en eller flera gånger |
{n} | Den föregående punkten matchas exakt n antal gånger. |
{n,} | Det föregående objektet matchas n eller fler gånger |
{,m} | Det föregående objektet matchas högst m gånger |
{n,m} | Den föregående punkten matchas minst n gånger men högst m gånger |
Exempel:
I följande exempel matchas de rader som innehåller följande uttryck:
som börjar med ”Gnome” och slutar med ” programs”
Exempel 10: Markering av söksträngen
När du ställer in miljövariabeln GREP_OPTIONS enligt nedan får du utdata med söksträngen/mönstret markerat i resultatet:
Du kan sedan söka efter strängen på vilket sätt som helst som vi har beskrivit i exemplen i denna artikel.
Exempel 11: Utföra inverterad sökning i en fil
Med inverterad sökning menar vi att egrep-kommandot skriver ut allt i filen, utom de rader som innehåller söksträngen. Vi kommer att använda följande exempelfil för att förklara inverterad sökning med hjälp av egrep. Vi har skrivit ut innehållet i filen med hjälp av kommandot cat:
Syntax:
Exempel:
Från exempelfilen vi nämnde vill vi utelämna den rad som innehåller ordet ”two” i resultatet, därför använder vi följande kommando:
Du kan se hur utmatningen innehåller allt från provfilen utom den andra raden som innehöll söksträngen ”two”.
Exempel 12: Utföra inverterad sökning baserad på flera kriterier/sökmönster
Med flaggan -v kan du också få egrep-kommandot att utföra en inverterad sökning baserad på mer än en söksträng/mönster.
Vi kommer att använda samma exempelfil som vi nämnde i exempel 11 för att förklara detta scenario.
Syntax:
…. filename
Exempel:
Från exempelfilen vi nämnde vill vi utelämna den eller de rader som innehåller orden ”one” och ”two” i resultatet, därför använder vi följande kommando:
Vi har angett två ord att utelämna med hjälp av flaggan -e, därför kommer utmatningen att se ut på följande sätt:
Exempel 13: Utskrift av antalet rader som stämmer överens med söksträngen
Istället för att skriva ut den sökta strängen från filen eller de rader som innehåller den, kan du använda kommandot egrep för att räkna och skriva ut antalet rader som stämmer överens med strängen. Denna räkning kan hämtas med hjälp av flaggan -c med egrep-kommandot.
Syntax:
Exempel:
I det här exemplet använder vi flaggan -c för att räkna antalet rader som innehåller ordet ”This” i vår exempelfil:
Du kan också använda funktionen för inverterad sökning här för att räkna och skriva ut antalet rader som inte innehåller söksträngen:
Exempel 14: Visa radnumret där strängen matchas
Med flaggan -n kan du få egrep-kommandot att skriva ut den matchade raden tillsammans med det radnummer som innehåller söksträngen.
Syntax:
Exempel:
Du kan se hur radnumren visas mot sökresultaten.
Exempel 15: Visar positionen i filen där söksträngen matchar
Om du vill veta positionen i filen där söksträngen finns kan du använda flaggan -b med kommandot egrep.
Exempel:
Sökresultatet skriver ut byteoffset i filen där sökordet existerar.Det här var en detaljerad användning av egrep-kommandot. Genom att använda en kombination av de flaggor som förklaras i den här artikeln kan du utföra mer meningsfulla och komplexa sökningar i dina filer.