grep

Hitta strängar i textfiler med grep med reguljärt uttryck

Hitta strängar i textfiler med grep med reguljärt uttryck
grep är ett av de mest populära verktygen för att söka och hitta strängar i en textfil. Namnet 'grep' kommer från ett kommando i det nu föråldrade verktyget för Unix ed-redigeringsverktyg - ed-kommandot för sökning globalt genom en fil för en vanligt uttryck och då utskrift dessa rader var g / re / p, var var det vanliga uttrycket du skulle använda. Så småningom skrevs kommandot grep för att göra denna sökning på en fil när du inte använder ed.

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 '\ $' bok

Ex 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-bok

Ex 3: Hitta en enda specialcharter i en textfil

För att mata ut rader i filen 'bok' som innehåller ett '\' tecken, skriv:

$ grep '\\' bok

Ex 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 / ord

Fö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' boken

NOTERA: 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år

Ex 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 / ord

Fö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 / ord

För att mata ut alla rader i '/ usr / dict / ord' som är tjugotvå eller fler tecken bred, skriv:

$ grep 'ˆ.\ 22, \ $ '/ usr / dict / ord

Ex 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' playboy

Ex 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 himmel

Ex 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 / ord

Alternativet '-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

Resurser för Linux Kernel Programmers

Linux File System Dictionary

Omfattande granskning av hur Linux File and Directory System fungerar

Mus Mellan musknappen fungerar inte i Windows 10
Mellan musknappen fungerar inte i Windows 10
De mittknappen hjälper dig att bläddra igenom långa webbsidor och skärmar med mycket data. Om det slutar, kommer du sluta använda tangentbordet för at...
Mus Hur man ändrar vänster och höger musknapp på Windows 10 PC
Hur man ändrar vänster och höger musknapp på Windows 10 PC
Det är en hel norm att alla datormusenheter är ergonomiskt utformade för högerhänta användare. Men det finns musenheter tillgängliga som är speciellt ...
Mus Emulera musklick genom att sväva med Clickless Mouse i Windows 10
Emulera musklick genom att sväva med Clickless Mouse i Windows 10
Att använda en mus eller tangentbord i fel hållning av överdriven användning kan resultera i många hälsoproblem, inklusive stam, karpaltunnelsyndrom o...