I den här artikeln visar vi dig att köra avancerad strängsökning med Grep med reguljärt uttryck genom att ge dig 10 praktiska exempel på dess implementeringar. Många exempel som diskuteras i den här artikeln har praktiska konsekvenser, vilket innebär att du kan använda dem i din dagliga Linux-programmering. Följande exempel beskriver några regexp-exempel för vanligt sökta mönster.
Ex 1: Hitta en enda befraktare i en textfil
För att mata ut rader i filen 'bok' som innehåller ett '$' -tecken, skriv:
$ grep '\ $' bokEx 2: Hitta en enda sträng i en textfil
För att mata ut rader i filen 'bok' som innehåller strängen '$ 14.99 ', typ:
$ grep '$ 14 \.99-bokEx 3: Hitta en enda specialcharter i en textfil
För att mata ut rader i filen 'bok' som innehåller ett '\' tecken, skriv:
$ grep '\\' bokEx 4: Matchande rader som börjar med viss text
Använd 'ˆ' i en regexp för att beteckna början på en rad.
För att mata ut alla rader i '/ usr / dict / ord' som börjar med 'pro', skriv:
$ grep 'ˆpro' / usr / dict / ordFör att mata ut alla rader i filen "bok" som börjar med texten "i början", oavsett fall, skriv:
$ grep -i 'i början' bokenNOTERA: Dessa regexps citerades med 'tecken; detta beror på att vissa skal annars behandlar 'ˆ' karaktären som en speciell "metakaraktär"
Förutom sökningar efter ord och fraser kan du använda grep för att söka efter komplexa textmönster som kallas reguljära uttryck. Ett reguljärt uttryck - eller "regexp" - är en textsträng med specialtecken som anger a uppsättning mönster som matchar.
Tekniskt sett är ord- eller frasmönster vanliga uttryck - bara mycket enkla. I ett vanligt uttryck representerar de flesta tecken - inklusive bokstäver och siffror - sig själva. Till exempel regexp-mönstret 1 matchar strängen '1' och mönstret pojke matchar strängen "pojke".
Det finns ett antal reserverade tecken som kallas metatecken som inte representerar sig själva i ett reguljärt uttryck, men de har en speciell betydelse som används för att bygga komplexa mönster. Dessa metatecken är som följer: ., *, [, ], ˆ, $ och \. Det är bra att notera att sådana metatecken är vanliga bland nästan alla vanliga och speciella Linux-distributioner. Här är en bra artikel som täcker speciella betydelser av metatecken och ger exempel på deras användning.
Ex 5: Matcha linjer som slutar med viss text
Använd '$' som det sista tecknet i citerad text för att matcha den texten endast i slutet av en rad. För att mata ut rader i filen som "slutar" med ett utropstecken, skriv:
$ grep '!$ gårEx 6: Matchande linjer av en viss längd
För att matcha linjer med en viss längd, använd det antalet '.'tecken mellan' ˆ 'och' $ '- för att till exempel matcha alla rader som är två tecken (eller kolumner) breda, använd' ˆ… $ 'som regexp för att söka efter.
För att mata ut alla rader i '/ usr / dict / ord' som är exakt tre tecken breda, skriv:
$ grep 'ˆ ... $' / usr / dict / ordFör längre rader är det mer användbart att använda en annan konstruktion: 'ˆ.\ number \ $ ', där antalet är antalet rader som ska matchas. Använd ',' för att ange ett antal nummer.
För att mata ut alla rader i '/ usr / dict / ord' som är exakt tolv tecken breda, skriv:
$ grep 'ˆ.\ 12 \ $ '/ usr / dict / ordFör att mata ut alla rader i '/ usr / dict / ord' som är tjugotvå eller fler tecken bred, skriv:
$ grep 'ˆ.\ 22, \ $ '/ usr / dict / ordEx 7: Matchande linjer som innehåller något av Regexps
För att matcha rader som innehåller något av ett antal regexps, ange var och en av regexps att söka efter mellan alternationsoperatorer ('\ |') som regex att söka efter. Linjer som innehåller något av de angivna regexpsen matas ut.
För att mata ut alla rader i 'playboy' som innehåller antingen mönstren 'boken' eller 'tårta', skriv:
$ grep 'the book \ | cake' playboyEx 8: Matchande linjer som innehåller alla vissa Regexps
För att mata ut linjer som matchar Allt av ett antal regexps, använd grep för att mata ut rader som innehåller den första regexp som du vill matcha, och rör utgången till en grep med den andra regexp som argument. Fortsätt lägga till pipor till grep-sökningar efter alla regexps du vill söka efter.
För att mata ut alla rader i 'spellista' som innehåller både mönster 'the shore' och 'sky', oavsett fall, skriv:
$ grep -i 'the shore' spellista | grep -i himmelEx 9: Matchande rader som bara innehåller vissa tecken
För att matcha rader som bara innehåller vissa tecken, använd regexp 'ˆ [tecken] * $', där tecken är de som matchar. För att mata ut rader i '/ usr / dict / ord' som bara innehåller vokaler, skriv:
$ grep -i 'ˆ [aeiou] * $' / usr / dict / ordAlternativet '-i' matchar tecken oavsett fall; så i det här exemplet matchas alla vokalkaraktärer oavsett fall.
Ex 10: Hitta fraser oavsett mellanrum
Ett sätt att söka efter en fras som kan förekomma med extra mellanslag mellan ord eller över en rad eller sidbrytning är att ta bort alla radmatningar och extra mellanslag från inmatningen och sedan grep. För att göra detta, rör inmatningen till tr med "\ r \ n: \> \ | -" som ett argument till alternativet '-d' (ta bort alla radbrytningar från ingången); rör det till FM-filtret med alternativet '-u' (mata ut texten med jämnt mellanrum); och rör det för att grep med mönstret att söka efter.
För att söka över radbrytningar efter strängen 'samtidigt som' i filen 'docs', skriv:
$ kattdokument | tr -d '\ r \ n: \> \ |-'| fmt -u | grep 'samtidigt som'
Sammanfattning
I den här artikeln granskade vi 10 praktiska exempel på att använda Grep Linux-kommandot för att söka och hitta strängar i en textfil. Längs vägen lärde vi oss hur man använder reguljära uttryck i samband med Grep för att göra komplexa sökningar på textfiler. Nu har du en bättre uppfattning om hur kraftfulla Linux-sökfunktioner är.
Här är ytterligare resurser för dem som är intresserade av att lära sig mer om Linux-programmering:
Resurser för systemadministratörer
- Linux System Admin Guide - Vad är Linux operativsystem och hur det fungerar
- Linux System Admin Guide - Översikt över Linux Virtual Memory och Disk Buffer Cache
- Linux System Admin Guide - Bästa metoder för övervakning av Linux-system
- Linux System Admin Guide - Bästa metoder för att utföra Linux-start och avstängning
- Linux System Admin Guide - Bästa praxis för att göra och hantera säkerhetskopieringsåtgärder
Resurser för Linux Kernel Programmers
- Hur Linux-operativsystemets minneshantering fungerar
- Omfattande granskning av Linux-kärnoperationssystemprocesser
- Vilka är mekanismer bakom Linux Kernel task management
Linux File System Dictionary
Omfattande granskning av hur Linux File and Directory System fungerar