Hur man utesluter ett ord med grep
Innehållsförteckning:
Kommandoradsverktyget grep är mycket användbart för att söka igenom textdata efter rader och utdrag som matchar en definierad sträng, tecken, ord eller reguljärt uttryck. Medan de flesta användningarna av grep är för att sortera data för syntaxmatchningar, vad händer om du vill utesluta ett ord eller en sträng med grep istället? Att utesluta linjematchningar med grep är lika användbart som att hitta och skriva ut matchningar i grep, så låt oss ta upp hur man utesluter strängmatchningar och exkluderar ord med grep.
Självklart vill du ha lite kommandoradserfarenhet och exponering för grep för att hitta detta användbart. Om du vill följa med kan du öppna applikationen Terminal och prova själv. Eftersom grep är ett OS-agnostiskt verktyg kan du använda exkluderingstricket i Mac OS, Linux, unix eller vad du nu har som använder grep.
Hur man utesluter ett enstaka ord med grep
Det enklaste sättet att utesluta rader med en sträng- eller syntaxmatchning är att använda grep och flaggan -v.
Till exempel, låt oss säga att vi använder cat för att skriva ut en fil på kommandoraden, men vi vill utesluta alla rader som innehåller termen "ThisWord", då skulle syntaxen se ut som följer:
cat example.txt | grep -v ThisWord"
Utdata kommer att vara textfilen example.txt men exkluderar alla rader som innehåller en sträng som matchar "ThisWord".
Du kan också använda grep direkt på filer och exkludera radmatchningar baserat på ord eller syntax, som så:
"grep -v ThisWord>"
Använd det som fungerar bäst för just ditt arbetsflöde.
Hur utesluter du flera strängar eller ord med grep
Nu när du vet hur man utesluter matchningar för ett enstaka ord, handlar nästa uppenbara fråga om att utesluta flera ord med grep. Det är lika enkelt, och det finns några olika sätt att åstadkomma detta med -v-flaggan såväl som -e-flaggan.
Låt oss först ta exemplet ovan på att använda cat på en fil som skickas till grep, och exkludera alla rader som matchar två ord; "Word1" och "Word2", detta skulle se ut så här:
"cat example.txt | grep -v -e Word1 -e Word2"
Alla rader som innehåller "Word1" eller "Word2" kommer att exkluderas från de utskrivna resultaten.
Du kan också använda grep direkt på filer precis som tidigare också:
"grep -v -e Word1 -e Word2 example.txt"
En annan metod är att separera vad som ska uteslutas med grep genom att använda ett rör för att separera varje matchning, som så:
grep -Ev word1|ord2 exempel.txt"
Om du testar något av dessa alternativ på en exempeltextfil, kommer du att upptäcka att utdata är identisk oavsett vilket tillvägagångssätt du använder, var och en exklusive rader som innehåller de riktade fraserna, syntaxen, orden eller textmatchning.
Bra, visa mig ett användbart exempel på att exkludera data med grep!
För ett praktiskt exempel som avancerade Mac-användare kan vara till hjälp kan vi använda grep-uteslutning vid utskrift och sökning av kommandoradshistorik för att hitta tidigare körda kommandon för att hitta standardmatchningar, men exkludera vissa valda standardsträngar från produktion.
I exemplet här skriver vi ut kommandohistorik för standardsträngmatchningar, men utesluter allt som har med iTunes att göra enligt definitionen 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 körningar av kommandot "defaults write", men exklusive allt som hörde till iTunes-applikationen. Trevligt va?
Om du har några särskilt praktiska användningsområden för att utesluta matchningar med grep, dela dem med oss i kommentarerna nedan! Och om du gillade 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 dig!