Het grep-commando begrijpen met praktische voorbeelden om eenvoudig de bestandsinhoud te filteren en weer te geven
GREP
staat voor 'Global Regular Expression Print'. Het is een handig opdrachtregelprogramma dat door Linux wordt geleverd om te zoeken naar de tekstregel die overeenkomt met het patroon dat door de gebruiker is opgegeven.
grep
neemt de invoer van de gebruiker in de vorm van strings of woorden die de gebruiker wil zoeken in een bepaald bestand. De opdracht controleert vervolgens het bestand dat door de gebruiker is opgegeven voor dit patroon en retourneert vervolgens de regels die overeenkomen met het opgegeven patroon.
Het doet uitstekend werk door de inhoud van een bestand te filteren, waardoor het onze taak gemakkelijker wordt om bepaalde inhoud op één of meerdere bestanden tegelijk te doorzoeken.
Laten we in dit artikel de werking van de grep
commando met enkele praktische voorbeelden in detail.
Opties beschikbaar met grep
opdracht
Dit zijn enkele van de fundamentele opties die u vaak zult gebruiken met de grep
opdracht.
Optie | Beschrijving |
-I | Voor een hoofdletterongevoelige zoekopdracht |
-R | Recursief zoeken naar alle bestanden in de opgegeven map en zijn submappen |
-C | Om het totale aantal keren dat een tekenreeks verschijnt weer te geven |
-v | Om de niet-overeenkomende lijnen weer te geven |
-w | Filter op dat specifieke woord dat apart wordt gebruikt |
De ... gebruiken grep
opdracht
grep
commando wordt meestal gebruikt met de pijp (|
) nutsvoorziening. Het kan worden geïmplementeerd met de shell-pipe als je het wilt gebruiken met een aantal andere Linux-commando's. Hoewel, grep
kan ook afzonderlijk worden gebruikt zonder de buis (|
) nutsvoorziening.
Laten we eens kijken naar enkele van de basissyntaxis van de grep
commando met en zonder het hulpprogramma pipe.
Laat me je eerst het voorbeeldtekstbestand laten zien dat ik zal gebruiken om de grep
opdracht.
INDIA IS EEN MOOI LAND VAN VREDE LIEFDEVOLLE MENSEN. India staat op drie pijlers van wetgevende, uitvoerende en rechterlijke macht. India is een prachtig land van vredelievende mensen. India geeft om de mensen, omdat het de cartesische coördinaten van de grondstof is, het belang van alle cartesische coördinaten. Hierna volgen twee lege regels. het gebruik van een ossenkar is een veelvoorkomend verschijnsel in het dorp voor het agrarische karwei. Dit is het einde van het voorbeeldbestand.
grep
gebruikt met pijp ( | )nutsvoorziening
grep
commando kan samen met andere Linux-commando's worden geïmplementeerd met behulp van de shell-pipes. Zoals, met behulp van de kat
commando om de inhoud van het bestand weer te geven, maar tegelijkertijd de uitvoer door te sturen met de grep
commando om alleen de inhoud weer te geven die u wilt zien. Dit wordt duidelijker als we het voorbeeld doornemen.
Syntaxis:
[opdracht] | grep [string]
Voorbeeld:
kat voorbeeld.txt | grep wetgevende macht
Hier heb ik de kat
commando om enkele regels uit het bestand 'sample.txt' weer te geven. Alleen die regels moeten worden weergegeven waarin het woord ‘wetgevende macht’ staat en negeer de rest van de regels.
Uitgang::
gaurav@ubuntu:~/workspace$ cat sample.txt | grep wetgevende macht india staat op drie pijlers van de wetgevende macht, de uitvoerende macht en de rechterlijke macht. gaurav@ubuntu:~/werkruimte$
grep
gebruikt zonder pijp ( | )nutsvoorziening
grep
kan zelfs direct worden gebruikt als een individuele opdracht zonder de pijp te gebruiken ( |
) nutsvoorziening.
Syntaxis:
grep [string_to_be_searched] [bestandsnaam]
Voorbeeld:
grep India voorbeeld.txt
Uitgang::
India is een prachtig land van vredelievende mensen. India geeft om de mensen als hulpbron
Zo heb ik de grep
commando om de regels die de string ‘India’ bevatten uit het tekstbestand ‘sample.txt’ te filteren.
Hoofdletterongevoelig zoeken met grep
opdracht
Linux is erg voorzichtig met de hoofdlettergevoeligheid wanneer we de opdrachten op de terminal uitvoeren. Dit vereist dat de gebruiker voorzichtig is met het geval van de tekenreeks die in de opdracht wordt geplaatst.
Laten we dit aan de hand van een voorbeeld bekijken.
grep vrede sample.txt
In dit geval krijgen we geen uitvoer omdat er geen woord als 'vrede' in het voorbeeldbestand voorkomt. We hebben het woord 'Vrede' met een hoofdletter 'P'. Het woord is hetzelfde, maar wanneer we de . gebruiken grep
commando zonder enige optie, zoekt het naar de exacte overeenkomst in het bestand, waarbij eventuele wijzigingen in de letterkast buiten beschouwing worden gelaten.
Om deze dubbelzinnigheid te voorkomen, kunt u eenvoudig de -I
optie die letterlijk de . vertelt grep
opdracht "Vergeet de zaak waarin ik de string heb geplaatst en zoek gewoon naar alle overeenkomende patronen in het bestand."
Syntaxis:
grep -i [string] [bestandsnaam]
Voorbeeld:
grep -i vrede sample.txt
Uitgang::
INDIA IS EEN MOOI LAND VAN VREDE LIEFDEVOLLE MENSEN. India is een prachtig land van vredelievende mensen.
Alle overeenkomende regels worden weergegeven, ongeacht het geval waarin de overeenkomende tekenreeks zich bevindt.
Recursief zoeken met grep
opdracht
De -R
optie zoekt naar alle bestanden in een map en alle submappen die overeenkomen met het tekenreekspatroon dat door de gebruiker in de opdracht is opgegeven.
Syntaxis:
grep -i -r [tekenreeks] [bestandspad]
Voorbeeld:
grep -i -r kater /home/gaurav/werkruimte
De string hier is 'tomcat' en deze zal worden doorzocht in de directory-werkruimte. Alle submappen en bestanden in de map 'werkruimte' worden ook gescand om overeen te komen met het opgegeven tekenreekspatroon.
Uitgang::
./context_log.policy:// catalina.policy - Beveiligingsbeleidsmachtigingen voor Tomcat 7 ./context_log.policy:// Opmerking: als tomcat-juli.jar in ${catalina.base} staat en niet in ${catalina.home }, ./context_log.policy:// grant codeBase "file:${catalina.base}/bin/tomcat-juli.jar" {..} ./context_log.policy:grant codeBase "file:${catalina.home }/bin/tomcat-juli.jar" { ./context_log.policy: toestemming java.lang.RuntimePermission "accessClassInPackage.org.apache.tomcat.websocket.server"; ./context.xml: ./catalina.properties:# - Tomcat Bootstrap JARs ./catalina.properties:# - Tomcat API JARs ./catalina.properties:# - Tomcat JARs ./catalina.properties:# - Veelvoorkomende niet-Tomcat JARs ./catalina.properties:org.apache.catalina.startup.TldConfig.jarsToSkip=tomcat7-websocket.jar ./catalina.properties:tomcat.util.buf.StringCache.byte.enabled=true ./catalina.properties:# tomcat.util.buf.StringCache.char.enabled=true ./catalina.properties:#tomcat.util.buf.StringCache.trainThreshold=500000 ./catalina.properties:#tomcat.util.buf.StringCache.cacheSize=5000 . /server.xml: padnaam="conf/tomcat-users.xml" /> ./server.xml:
NOTITIE: Tijdens het gebruik van de -R
optie met de grep
commando moeten we het pad van het bestand opgeven en niet de bestandsnaam
Alleen hele woorden zoeken met grep
opdracht
Vaak is het zo dat u naar één woord zoekt, maar dat u uiteindelijk uw terminal vult met de overeenkomende regels die uw overeenkomende woord wel bevatten, maar niet als een afzonderlijk woord. Mogelijk ziet u de regels die enkele woorden bevatten waarvan het subgedeelte de tekenreeks is die u hebt ingevoerd.
Verward hiermee? Maak je geen zorgen, het is veel gemakkelijker te begrijpen als je het voorbeeld eenmaal hebt.
Voorbeeld:
Hier wil ik een afzonderlijk woord 'cart' zoeken en alle regels weergeven die overeenkomen met dit woord in het bestand 'sample.txt'.
grep -i winkelwagen sample.txt
Uitgang::
Cartesiaanse coördinaten belang van alle Cartesiaanse coördinaten. het gebruik van een ossenkar is een veelvoorkomend verschijnsel in het dorp voor het agrarische werk. De kar werd vermist toen de jongen hem losliet.
In de uitvoer kunt u zien dat het woord 'Cartesian' ook het woord 'cart' bevat en daarom worden de regels met het woord 'Cartesian' ook weergegeven, ook al willen we niet dat ze worden weergegeven.
U kunt de -w
optie met de grep
opdracht om deze dubbelzinnigheid op te lossen.
Syntaxis:
grep -i -w [tekenreeks] [bestandsnaam]
Voorbeeld:
grep -i -w winkelwagen sample.txt
Uitgang::
het gebruik van een ossenkar is een veelvoorkomend verschijnsel in het dorp voor het agrarische karwei. De kar werd vermist toen de jongen hem los liet.
Nu, wanneer u de -met wie
optie met grep
u krijgt alleen de regels waarin het woord 'kar' in zijn geheel wordt gebruikt.
Omgekeerd zoeken met grep
opdracht
grep
commando kan ook omgekeerd worden gebruikt. We kunnen de grep
het tegenovergestelde commando door de overeenkomende regels te verbergen en alleen de regels weer te geven waar de overeenkomst niet is gevonden. U kunt dit doen met behulp van de -v
optie met de grep
opdracht.
Syntaxis:
grep -i -v [tekenreeks] [bestandsnaam]
Voorbeeld:
grep -i -v resource sample.txt
Uitgang::
INDIA IS EEN MOOI LAND VAN VREDE LIEFDEVOLLE MENSEN. India staat op drie pijlers van wetgevende, uitvoerende en rechterlijke macht. India is een prachtig land van vredelievende mensen. cartesische coördinaten belang van alle cartesische coördinaten. het gebruik van een ossenkar is een veelvoorkomend verschijnsel in het dorp voor het agrarische karwei. Dit is het einde van het voorbeeldbestand.
In de uitvoer worden alle andere regels weergegeven, behalve de regel die het woord 'resource' bevat.
Voorvallen tellen van overeenkomende tekenreeksen
De uitvoer van de grep
commando is meestal erg lang als de gegevens in het bestand uitgebreid zijn. Hoe meer overeenkomsten, hoe langer de uitgangen van de grep
opdracht. Linux biedt u een optie waarmee u het aantal keren dat de overeenkomst voorkomt kunt weergeven.
Syntaxis:
grep -i -c [tekenreeks] [bestandsnaam]
Voorbeeld:
grep -i -c india voorbeeld.txt
Uitgang::
gaurav@ubuntu:~/workspace$ grep -i -c india sample.txt 4 gaurav@ubuntu:~/workspace$
Hier is de uitvoer een getal, het aantal keren dat het woord 'India' in het bestand sample.txt voorkomt.
NOTITIE: Ik heb de gebruikt -I
optie in elk voorbeeld om gewoon veilig te zijn met het probleem met hoofdlettergevoeligheid. Als u zeker bent van de naamval van het woord waarnaar u zoekt, kunt u de weglaten -I
optie.
Gevolgtrekking
We hebben de fundamentele toepassingen van de grep
commando op de Linux-systemen in deze tutorial. We hebben ook geleerd om verschillende inhoud weer te geven die het beste bij onze eisen past en de terminal niet vol te proppen met rijen lijnen. grep
commando zal zeker tijd besparen als het wordt gebruikt voor het scannen van grote datasets.