Har du använt grep tidigare? För det mesta kan det grundläggande grep-tricket göra det mesta av jobbet. Grep erbjuder dock massor av sätt att utföra sökningen och finjustera utdata till en mer användbar version. I den här artikeln, låt oss kolla in användningen av kommandot grep.
Grep-användning
Verifierar existensen
Om du kör någon form av Linux-distro har du redan grep installerat. Kör följande kommando i terminalen.
grep --version
Detta kommando används för att visa versionen av för närvarande installerad grep. Nu behöver vi en demofil. I mitt fall genererar jag en textfil som innehåller alla installerade paket på mitt system.
Grunderna
Den grundläggande användningen av grep följer följande struktur.
grepEller för att förstå det lättare, använd den här.
grepI det här fallet kommer grep att söka i filen och skriva ut alla rader som inkluderar mönstret (sökord).
grep python ~ / Desktop / PackageList.Text
Grep sökte i filen "PackageList.txt ”Jag genererade tidigare och skrev ut alla rader som innehåller“ python ”.
Samma operation kan utföras på ett annat sätt. Kolla in följande exempel.
cat ~ / Desktop / PackageList.txt | grep python
Här skickade jag innehållet i filen "PackageList" med kommandot "cat".txt ”till grep. Med hjälp av utdata från katt utförde grep sökningen och skrev ut raderna som innehåller söktermen.
Nu kommer en rolig sak. Du kan bokstavligen stapla flera grep-kommandon precis så.
cat ~ / Desktop / PackageList.txt | grep - | grep p | grep python
Den första grep filtrerar ner till raderna med ett bindestreck, det andra filtret ner till raderna med p, och den sista grep filtrerar ner till raderna med python. Är vettigt?
Skiftlägeskänslighet
När du utför en sökning är skiftlägeskänslighet en stor fråga. Som standard är grep skiftlägeskänslig.
Om du till exempel söker efter "Python" visas inget resultat.
cat ~ / Desktop / PackageList.txt | grep Python
Lägg till följande alternativ för att göra grep-skriften "okänslig".
cat ~ / Desktop / PackageList.txt | grep -i Python
Filsökning
Låt oss säga att du har en katalog med många textfiler. Ditt mål är att identifiera filerna som innehåller eller inte innehåller ett mönster (sökord).
Jag tycker att den här metoden är ganska bra när jag söker i en hög med loggfiler. Eftersom jag inte har tid att öppna och kontrollera varje enskild fil manuellt, har jag grep att göra jobbet åt mig.
Använd ”-l” -flaggan för att lista filer som innehåller matchningen.
grep -l
Som resultatet antyder är termen "python" närvarande i alla tre filer som finns i "Desktop" -katalogen.
För att lista filer utan någon matchning, använd flaggan “-L”.
grep -L
"Ingen match.txt ”är den enda filen som inte innehåller termen“ python ”.
Inverterad sökning
Standardbeteendet för grep är att bara skriva ut raderna med matchande mönster, höger? Det är dags att vända processen. Den här gången skriver vi bara ut raderna UTAN det matchande mönstret.
Skicka bara alternativet “-v” till grep.
cat ~ / Desktop / PackageList.txt | grep -i -v Python
Skriva ut linjer före / efter matchen
Som standard skriver grep bara ut den linje som matchar sökmönstret. Med den här tekniken kan du be grep skriva ut rader före / efter matchen också.
Använd följande struktur för att skriva ut linjer före matchen.
grep -B
Här är 5 talraden som grep kommer att skriva ut INNAN matchande rad.
Använd följande för att skriva ut linjer efter matchningen.
grep -A
Vad sägs om att skriva ut både före och efter matchande linje? Använd i så fall “-C” -flaggan.
grep -C
Linje nummer
När grep visar utdata nämns inte radnumret. För tillhörande radnummer, använd flaggan “-n”.
grep -n
Ett ord
Om flaggan “-w” används behandlar grep mönstret som ett helt ord.
grep -w
Begränsar grep-sökning
Med Grep kan du ange antalet rader som ska sökas i filen. Den här metoden är användbar om du har att göra med en stor fil (som systemlogg). Använd flaggan “-m”.
grep -m
Rekursiv sökning
Det är en av de mest användbara funktionerna grep erbjuder för tung användning. Grep kan rekursivt söka i en katalog och hitta alla matchningar från alla filer den står inför.
grep -REller,
grep -r
Jag hittar ofta att använda den här rekursiva funktionen tillsammans med “-l” -flaggan.
Tyst läge
Grep kan köras i “tyst” läge. När du kör i "tyst" -läge skriver inte grep ut någon utgång till terminalen. Istället returnerar den 0 (åtminstone hittades en matchning) eller 1 (ingen matchning hittades).
grep -qeko $?
Regex
Grep tillåter också regex-sökningar (reguljärt uttryck). Detta lägger till en helt ny nivå av komplexitet och användbarhet av grep som ett sökverktyg.
Du kan till exempel använda parenteser för att söka efter både "alltför" och "två" samtidigt.
cat ~ / Desktop / gpl-3.0.txt | grep t [wo] o
Detta nästa exempel kommer bara att skriva ut raden om matchningen inträffar i början av raden.
grep ^ GNU ~ / Desktop / gpl-3.0.Text
När det gäller att matcha slutet, använd den här.
grep dig $ ~ / Desktop / gpl-3.0.Text
Om du vill använda Perl regex, använd sedan "-P" -flaggan. Det kommer att behandla mönstret som Perl regex.
grep -PSlutgiltiga tankar
Grep erbjuder massor av sätt att anpassa sökfunktionen. Tillgången på regex låser upp en helt ny horisont för potentiell användning av grep. Det coolaste är att du kan använda både general och Perl regex; det du känner dig bekväm med.
För den mest detaljerade förklaringen, konsultera alltid mansidan.
man grep
Skål!