Det finns en klassisk bit av dator visdom som säger "Om du har ett problem och bestämmer dig för att lösa det med regelbundna uttryck, har du nu två problem." Det här förstås naturligtvis av uppfattningen att regelbundna uttryck är en komplicerad blandning av magiska tecken och Voodoo. Med regelbundna uttryck kan du snabbt och enkelt få en elegant och noggrann programlogik, men bara en gång du har lärt dig att förstå hur de fungerar och varför. Nästan alla Linux- eller Mac-system levereras med ett kraftfullt regexverktygssamtal grep och lärande grep är en viktig uppgift för alla strömanvändare eller systemadministratörer. Idag ska vi utforska några av vad du kan göra med grep och hur det kan vara ett av de kraftfullaste verktygen i din nörd arsenal.

Hur det fungerar

Kort sagt, Greps jobb är att söka igenom ett block av inmatning. Det är ganska vagt, så det beskrivs bäst av exempel. Låt oss säga att du har en textfil kallad distros.txt som har en lista över Linux-distributioner, som den nedan.

Debian - Stabil serverdistribution
Ubuntu - Desktop distro ursprungligen baserat på Debian
Kubuntu - Använder KDE-skrivbordet istället för GNOME
Fedora - Fortsättning av det fria Red Hat-skrivbordssystemet
Gentoo - Ett snabbt, källbaserat Linux-system för pro användare
SuSE - Kommersiell Linux ägd av Novell
Mint - Ubuntu-härledd distro med ytterligare begränsad programvara

Grep kan användas för att läsa igenom texten och filtrera den för att visa endast de delar du vill ha. Om du bara vill se de linjer som innehåller ordet "Ubuntu", skulle du köra följande kommando:

 grep Ubuntu distros.txt 

(Din version av grep kan eller kanske inte innehålla färgmarkering som i exemplet ovan)

Fallkänslighet

Du kanske har märkt att vår senaste sökning inte returnerade Kubuntu. Om inte annat sägas antar grep att du har skrivit ditt uttryck precis som du ville ha det, och det gäller både stora och små bokstäver. Om du söker efter "ubuntu" men din textfil innehåller "Ubuntu" kommer din sökning inte att hitta något. För att göra din sökning sakokänslig, använd -i- omkopplaren, som i

 grep -i ubuntu distros.txt 

Hela världen

Med den tidigare sökningen inkluderade du alla bokstävervarianter av ordet "Ubuntu". Det inkluderade Kubuntu eftersom det innehåller ordet du sökte efter. Du kanske bara vill inkludera standardversionen, inte Kubuntu eller Edubuntu, etc. Om så är fallet kan du säga grep att matcha hela ordet endast genom att överföra -w- alternativet.

 grep -i ubuntu distros.txt 

Uteslutning

Så mycket som du kan använda grep för att visa bara matchande poster, kan du också använda den för att visa allt men de matchande posterna. För att expandera på våra tidigare sökningar kan vi nu använda -v alternativet för att vända våra resultat och visa bara de linjer som inte matchar.

joker~~POS=TRUNC

Grep har fullt stöd för jokertecken när matchande mönster. När du använder jokertyper och andra specialtecken vill du se till att ditt sökmönster finns i citat, så Linux-skalet inte försöker tolka dem innan grep-kan. Vanliga jokertecken inkluderar * för grupper av tecken och. för att representera en enda okänd karaktär.

Ranges

Om jokertyperna är lite för breda för dig kan du ange enskilda tecken eller ett intervall som ska inkluderas i din sökning. Tecken inom ruta parentes kommer att inkluderas i ditt sökmönster. Om du till exempel hade en fil med en lista som

 Punkt 1 - Äpplen Punkt 2 - Bananer Punkt 3 - Kokosnötter Artikel 4 - Persikor Artikel 5 - Druvor Artikel 6 - Aprikos 

Du kan välja ett visst sortiment genom att använda något liknande

 grep "Artikel [2-4]" items.txt 

Grep är ett oerhört kraftfullt verktyg, och att lära sig det noggrant kan betala på alla sätt. Förstå grep gör det också mycket enklare att gå vidare till andra kraftfulla konsolverktyg som sed och awk. Mellan de tre verktygen kan en fantastisk mängd konsol och manuskript göra med mycket mindre ansträngning än det verkar som möjligt. Om du är ett fan av grep, eller vill se andra verktyg som sed och awk täckt här, snälla släpp en anteckning i kommentarerna.