Sådan ekskluderes et ord med grep
Indholdsfortegnelse:
Kommandolinjeværktøjet grep er vildt nyttigt til at søge gennem tekstdata efter linjer og uddrag, der matcher en defineret streng, tegn, ord eller regulært udtryk. Mens de fleste anvendelser af grep er til at sortere data til syntaksmatches, hvad nu hvis du vil udelukke et ord eller en streng med grep i stedet? At udelukke linjematch med grep er lige så nyttigt som at finde og udskrive match i grep, så lad os dække, hvordan man udelukker strengmatch og udelukker ord med grep.
Selvfølgelig vil du gerne have noget kommandolinjeerfaring og eksponering for grep for at finde dette nyttigt. Hvis du vil følge med, kan du åbne Terminal-applikationen og prøve det selv. Da grep er et OS agnostisk hjælpeprogram, kan du bruge ekskluderingstricket i Mac OS, Linux, unix eller hvad du ellers har, der bruger grep.
Sådan ekskluderer du et enkelt ord med grep
Den enkleste måde at udelukke linjer med en streng eller syntaksmatch på er ved at bruge grep og flaget -v.
For eksempel, lad os sige, at vi bruger cat til at udskrive en fil på kommandolinjen, men vi ønsker at udelukke alle linjer, der indeholder udtrykket "ThisWord", så vil syntaksen se ud som følger:
cat example.txt | grep -v ThisWord"
Oputtet vil være eksempel.txt-tekstfilen, men ekskluderer enhver linje, der indeholder en streng, der matcher "ThisWord".
Du kan også bruge grep direkte på filer og udelukke linjematch baseret på ord eller syntaks, som f.eks.:
"grep -v ThisWord>"
Brug den, der passer bedst til netop din arbejdsgang.
Sådan ekskluderer du flere strenge eller ord med grep
Nu hvor du ved, hvordan du udelukker match for et enkelt ord, handler det næste oplagte spørgsmål om at ekskludere flere ord med grep. Det er lige så enkelt, og der er et par forskellige måder at opnå dette ved at bruge flaget -v såvel som -e.
Lad os først tage ovenstående eksempel på at bruge cat på en fil, der sendes til grep, og ekskludere alle linjer, der matcher to ord; "Word1" og "Word2", dette vil se sådan ud:
"cat example.txt | grep -v -e Word1 -e Word2"
Alle linjer, der indeholder "Word1" eller "Word2" vil blive udelukket fra de udskrevne resultater.
Du kan også bruge grep direkte på filer ligesom før:
"grep -v -e Word1 -e Word2 example.txt"
En anden fremgangsmåde er at adskille, hvad der skal udelukkes med grep ved at bruge et rør til at adskille hvert match, som sådan:
grep -Ev word1|ord2 eksempel.txt"
Hvis du afprøver nogen af disse muligheder på en eksempeltekstfil, vil du finde ud af, at outputtet er identisk uanset hvilken tilgang du tager, hver med undtagelse af linjer, der inkluderer de målrettede sætninger, syntaks, ord eller tekstmatch.
Fantastisk, vis mig et nyttigt eksempel på at ekskludere data med grep!
For et praktisk eksempel, som avancerede Mac-brugere kan finde nyttigt, kan vi bruge grep-ekskludering, når vi udskriver og forespørger kommandolinjehistorik for at finde tidligere udførte kommandoer for at finde standardmatches, men ekskluderer nogle valgte standardstrenge fra produktion.
I eksemplet her udskriver vi kommandohistorik for standardstrengmatches, men udelukker alt, der matcher, der har at gøre med iTunes som defineret af "com.apple.itunes":
"history |grep defaults write |grep -v -e com.apple.itunes"
Så hvis du har fulgt med, vil dette rapportere alle historiske udførelser af "defaults write"-kommandoen tilbage, men ekskluderer alt, der vedrører iTunes-applikationen. Dejligt hva?
Hvis du har nogen særlig praktisk anvendelse til at ekskludere kampe med grep, så del dem med os i kommentarerne nedenfor! Og hvis du kunne lide denne artikel, ville du næsten helt sikkert gerne gennemse vores mange kommandolinjeartikler her, hvor der er meget mere at lære!