Hur man utesluter ett ord med grep
Grep-kommandoradsverktyget är väldigt användbart för att söka igenom textdata för rader och fragment som matchar en definierad sträng, tecken, ord eller regelbundet uttryck. Medan de flesta användningarna av grep är för att sortera data för syntax matchningar, vad händer om du vill utesluta ett ord eller en sträng med grep istället? Exklusive linjematcher med grep är lika användbara som att hitta och skriva ut matchningar i grep, så låt oss täcka hur man utesluter strängmatchningar och utesluter ord med grep.
Självklart vill du ha lite kommandoradserfarenhet och exponering för grep för att finna det här användbart. Om du vill följa med kan du öppna terminalansökan och prova själv. Eftersom grep är ett agnostiskt verktyg för operativsystemet kan du använda uteslutet trick i Mac OS, Linux, Unix eller vad som helst annat du har som använder grep.
Hur man utesluter ett enkelord med grep
Det enklaste sättet att utesluta rader med en sträng eller syntax match är med grep och -v-flaggan.
Låt oss till exempel säga att vi använder katt för att skriva ut en fil på kommandoraden, men vi vill utesluta alla rader som innehåller termen "ThisWord", så skulle syntaxen se ut som följer:
cat example.txt | grep -v "ThisWord"
Utmatningen kommer att vara textfilen example.txt men exkluderar en rad som innehåller en strängmatchning med "ThisWord".
Du kan också använda grep direkt på filer och utesluta linjematcher baserat på ord eller syntax, så här:
grep -v "ThisWord" example.txt
Använd det som fungerar bäst för ditt arbetsflöde.
Hur man utesluter flera strängar eller ord med grep
Nu när du vet hur man utesluter matchningar för ett enda ord, handlar nästa uppenbara fråga om att inte utesluta flera ord med grep. Det är lika enkelt, och det finns några olika sätt att uppnå detta med -v-flaggan samt -e-flaggan.
Först kan vi ta ovanstående exempel på att använda katt på en fil som piped till grep, och utesluta några linjer som matchar två ord; "Word1" och "Word2" skulle det här se ut som följande:
cat example.txt | grep -v -e "Word1" -e "Word2"
Alla rader som innehåller "Word1" eller "Word2" kommer att uteslutas från de tryckta resultaten.
Du kan också använda grep direkt på filer precis som tidigare:
grep -v -e "Word1" -e "Word2" example.txt
Ett annat tillvägagångssätt är att skilja vad som ska uteslutas med grep genom att använda ett rör för att skilja varje match, så här:
grep -Ev "word1|word2" example.txt
Om du testar något av dessa alternativ på en exempell textfil, hittar du utmatningen är identisk oavsett vilken metod du tar, var och en exklusive linjer som innehåller riktade fraser, syntax, ord eller textmatchning.
Bra, visa mig ett användbart exempel på att utesluta data med grep!
För ett praktiskt exempel kan avancerade Mac-användare hitta hjälp, vi kan använda grep-uteslutning när du skriver ut och frågar kommandoradshistorik för att hitta tidigare exekverade kommandon för att hitta standardinställningar, men med undantag för vissa valda standardsträngar från utgången.
I exemplet här kommer vi skriva ut kommandog History för standardsträng matchningar, men utesluta allt som matchar med iTunes som definierat av "com.apple.itunes":
history |grep "defaults write" |grep -v -e "com.apple.itunes"
Så om du har följt med, skulle detta rapportera tillbaka alla historiska avrättningar av kommandot "standardskrivning", men med undantag för allt som hänför sig till iTunes-programmet. Trevligt va?
Om du har några särskilt praktiska användningsområden för att utesluta matcher med grep, dela dem med oss i kommentarerna nedan! Och om du tyckte om den här artikeln skulle du nästan säkert vilja bläddra igenom våra många kommandoradsartiklar här, där det finns mycket mer att lära!