Hoe een woord uit te sluiten met grep

Het grep-opdrachtregelhulpprogramma is bijzonder handig voor het doorzoeken van tekstgegevens naar regels en fragmenten die overeenkomen met een gedefinieerde tekenreeks, teken, woord of reguliere expressie. Hoewel de meeste toepassingen van grep zijn voor het sorteren van gegevens voor syntaxisovereenkomsten, wat als u in plaats daarvan een woord of tekenreeks met grep wilt uitsluiten ? Het uitsluiten van lijnovereenkomsten met grep is even nuttig als het vinden en afdrukken van overeenkomsten in grep, dus laten we bespreken hoe tekenreeksen uit te sluiten en woorden uit te sluiten met grep.


Vanzelfsprekend wilt u wat ervaring met de commandoregel en blootstelling aan Grep om dit nuttig te vinden. Als je mee wilt doen, kun je de Terminal-applicatie openen en zelf uitproberen. Omdat grep een OS agnostisch hulpprogramma is, kun je de exclude trick gebruiken in Mac OS, Linux, unix of wat dan ook dat je grep gebruikt.

Hoe een enkel woord uit te sluiten met grep

De eenvoudigste manier om regels uit te sluiten met een tekenreeks of syntaxisovereenkomst, is door grep en de vlag -v te gebruiken.

Laten we bijvoorbeeld zeggen dat we cat gebruiken om een ​​bestand op de opdrachtregel af te drukken, maar we willen alle regels uitsluiten die de term 'ThisWord' bevatten, waarna de syntaxis er als volgt uitziet:

cat example.txt | grep -v "ThisWord"

De uitvoer is het tekstbestand example.txt maar exclusief elke regel die een tekenreeks bevat die overeenkomt met "ThisWord".

U kunt grep ook rechtstreeks in bestanden gebruiken en regelovereenkomsten uitsluiten op basis van woorden of syntaxis, zoals:

grep -v "ThisWord" example.txt

Gebruik de methode die het beste werkt voor uw specifieke workflow.

Hoe meerdere strings of woorden uit te sluiten met grep

Nu je weet hoe je wedstrijden uitsluit voor een enkel woord, is de volgende voor de hand liggende vraag het uitsluiten van meerdere woorden met grep. Dat is net zo eenvoudig, en er zijn een paar verschillende manieren om dit te bereiken met de vlag -v en de vlag -e.

Laten we eerst het bovenstaande voorbeeld nemen van het gebruik van een kat in een bestand met een pipet naar grep, en alle regels uitsluiten die overeenkomen met twee woorden; "Word1" en "Word2", dit zou er als volgt uitzien:

cat example.txt | grep -v -e "Word1" -e "Word2"

Alle regels die "Word1" of "Word2" bevatten, worden uitgesloten van de afgedrukte resultaten.

Je kunt grep ook rechtstreeks op bestanden gebruiken, net als eerder:

grep -v -e "Word1" -e "Word2" example.txt

Een andere benadering is om te scheiden wat met grep wordt uitgesloten door een pijp te gebruiken om elke wedstrijd te scheiden, zoals:

grep -Ev "word1|word2" example.txt

Als u een van deze opties in een voorbeeldtekstbestand test, zult u merken dat de uitvoer identiek is, ongeacht de benadering die u volgt, waarbij elke regel met de beoogde zinsdelen, syntaxis, woorden of tekst overeenkomt.

Geweldig, laat me een handig voorbeeld zien van het uitsluiten van gegevens met grep!

Voor een praktisch voorbeeld dat geavanceerde Mac-gebruikers nuttig kunnen vinden, kunnen we grep-uitsluiting gebruiken bij het afdrukken en opvragen van de opdrachtregelgeschiedenis om eerder uitgevoerde opdrachten te vinden om standaardovereenkomsten te vinden, maar enkele geselecteerde standaardstrings uit te sluiten van de uitvoer.

In het voorbeeld hier drukken we de opdrachthistorie af voor standaardreeksovereenkomsten, maar sluit alles uit wat overeenkomt met iTunes, zoals gedefinieerd door "com.apple.itunes":

history |grep "defaults write" |grep -v -e "com.apple.itunes"

Dus als je meegekeken hebt, zou dit alle historische uitvoeringen van de "defaults write" -opdracht terugrapporteren, maar alles wat betrekking had op de iTunes-applicatie uitsluiten. Leuk he?

Als je bijzonder handig gebruik hebt van het uitsluiten van matches met grep, deel ze dan met ons in de comments hieronder! En als je dit artikel leuk vond, zou je bijna zeker graag door onze vele commandoregel-artikelen browsen, waar nog veel meer te leren valt!