Het Gebruik van het grep Commando op een Linux

0
671
Fatmawati Achmad Zaenuri/Shutterstock

De Linux grep commando is een string en patroonherkenning hulpprogramma dat geeft bijpassende lijnen van meerdere bestanden. Het werkt ook met gebiesde uitvoer van andere opdrachten. Wij laten u zien hoe.

Het Verhaal Achter grep

Het grep commando is beroemd in de Linux-en Unix-kringen om drie redenen. Ten eerste is het enorm nuttig. Ten tweede, de rijkdom van de opties kan worden overweldigend. Ten derde, het werd geschreven overnachting om te voldoen aan een bepaalde behoefte. De eerste twee zijn bang op; de derde is een beetje af.

Ken Thompson had gewonnen van de reguliere expressie in de zoekopdracht mogelijkheden van de ed editor (spreek uit: ee-dee) en aangemaakt met een klein programma—voor eigen gebruik—om te zoeken door middel van tekst bestanden. Zijn afdelingshoofd bij Bell Labs, Doug Mcilroy, benaderd Thompson en beschreven het probleem met één van zijn collega ‘ s, Lee McMahon, werd geconfronteerd.

McMahon was het zoeken naar de auteurs van de Federalist papers door middel van tekstuele analyse. Hij had een oplossing nodig die kunnen zoeken naar zinnen en tekenreeksen in bestanden. Thompson ongeveer een uur die avond maken van zijn gereedschap een algemene hulpprogramma dat gebruikt kan worden door anderen en hernoemd als grep. Hij nam de naam van de ed opdracht string g/re/p , wat zich vertaalt als “global reguliere expressie in de zoekopdracht.”

U kunt kijken naar Thompson praten met Brian Kernighan over de geboorte van grep.

Eenvoudige Zoekopdrachten Met grep

Om te zoeken naar een tekenreeks in een bestand, het doorgeven van de zoekterm en de naam van het bestand op de commando-regel:

Bijpassende lijnen worden weergegeven. In dit geval, het is een enkele regel. De overeenkomende tekst is gemarkeerd. Dit is omdat bij de meeste distributies grep is een alias naar:

alias grep=’grep –kleur=auto’

Laten we eens kijken naar resultaten waar er meerdere lijnen die wedstrijd. We kijken naar het woord “Gemiddelde” in een toepassings log boek bestand. Omdat we niet kunnen herinneren als het woord in kleine letters in het log boek bestand, gebruiken we de -i (hoofdlettergevoelig) optie:

grep-i Gemiddelde geek-1.log

Elke overeenkomende regel wordt weergegeven, met de bijpassende tekst gemarkeerd in elkaar.

Kunnen We weer de niet-overeenkomende regels door gebruik van de-v (omkeren match) optie.

grep -v Mem geek-1.log

Er is geen markering want dit zijn de niet-bijpassende lijnen.

Wij kunnen zorgen dat grep volledig stil. Het resultaat wordt doorgegeven aan de shell als een return waarde van grep. Een resultaat van nul betekent dat de tekenreeks is gevonden, en een gevolg van een betekent het werd niet gevonden. We kunnen in de return-code met behulp van de $? speciale parameters:

grep -q gemiddelde geek-1.log
echo $?
grep -q howtogeek geek-1.log
echo $?

Recursief zoeken Met grep

Zoeken door middel van geneste mappen en submappen, gebruikt u de -r (recursieve) optie. Let op dat u niet voorzien in een bestand op de commando-regel, moet u een pad. Hier maken we zoeken in de huidige directory “.” en alle subdirectory ‘ s:

grep -r-i memfree .

De uitvoer bevat de directory en de bestandsnaam van elke overeenkomende regel.

We kunnen grep symbolische koppelingen volgen met behulp van de-R (recursieve verwijzing) optie. We hebben een symbolische link in deze directory, genaamd logs-map. Het verwijst naar /home/dave/logs.

ls -l logs-map

Laten we herhalen onze laatste zoekopdracht met de -R (recursieve verwijzing) optie:

grep -R-i memfree .

De symbolische link wordt gevolgd en de map wijst naar wordt gezocht door grep ook.

Zoeken naar Hele Woorden

Standaard grep zal overeenkomen met een regel als het zoeken target verschijnt ergens in die lijn, ook binnen een andere tekenreeks. Kijk naar dit voorbeeld. We gaan zoeken naar het woord “gratis”.

grep-i gratis geek-1.log

De resultaten zijn lijnen die de string “gratis”, maar ze zijn niet van losse woorden. Ze zijn onderdeel van de reeks “MemFree.”

Te dwingen grep overeenkomen met afzonderlijke woorden alleen, gebruik maken van de -w (word regexp) optie.

grep -w-i gratis geek-1.log
echo $?

Dit keer zijn er geen resultaten omdat de term “gratis” niet wordt weergegeven in het bestand is als een apart woord.

Het Gebruik Van Meerdere Zoektermen

De -E (extended regexp) optie kunt u zoeken naar meerdere woorden. (De -E optie vervangt de verouderde egrep versie van grep.)

Dit commando zoekt twee zoektermen, “gemiddelde” en “memfree.”

grep -E -w-i “gemiddelde|memfree” geek-1.log

Alle bijpassende lijnen worden weergegeven voor elk van de zoektermen.

U kunt ook zoeken naar meerdere termen die niet noodzakelijkerwijs hele woorden, maar ze kunnen worden hele woorden.

De -e (patronen) optie kunt u meerdere zoektermen op de commando-regel. We maken gebruik van de reguliere expressie bracket-functie voor het maken van een zoekopdracht. Het vertelt grep overeenkomt met een van de personages die binnen de haakjes “[].” Dit betekent grep zal overeenkomen met “mb” of “KB” als hij zoekt.

Beide reeksen worden op elkaar afgestemd, en, in feite, sommige regels bevatten beide snaren.

Bijpassende Lijnen Precies

De -x (lijn regexp) zal alleen overeenkomen met de regels waar de hele lijn overeenkomt met de zoekterm. Laten we zoeken naar een datum en tijd stempel die we kennen slechts één keer weergegeven in het logboekbestand:

grep -x “20-Jan–06 15:24:35” geek-1.log

De één regel wordt gevonden en weergegeven.

Het tegenovergestelde van dat is slechts het tonen van de lijnen die niet overeenkomen. Dit kan handig zijn wanneer u op zoek bent naar configuratie bestanden. Reacties zijn geweldig, maar soms is het moeilijk om ter plaatse de daadwerkelijke instellingen in onder hen allen. Hier is het /etc/sudoers file:

We effectief kunnen filteren uit de regels met opmerkingen als deze:

sudo grep -v “#” /etc/sudoers

Dat is veel gemakkelijker te controleren.

Alleen Het Weergeven Van Bijpassende Tekst

Er kan een gelegenheid als u niet wilt dat om te zien de hele bijpassende lijn, alleen de overeenkomende tekst. De -o (alleen matching) optie is alleen dat.

grep -o MemFree geek-1.log

Het display wordt verlaagd tot het tonen van alleen de tekst die overeenkomt met de zoekterm, in plaats van de hele bijpassende lijn.

Tellen Met grep

grep is niet alleen om tekst, het kan numerieke informatie. We kunnen grep tellen voor ons op verschillende manieren. Als we willen weten hoe vaak een zoekterm verschijnt in een bestand, kunnen we gebruik maken van de -c (tellen) optie.

grep -c gemiddelde geek-1.log

grep meldt dat de zoekterm verschijnt 240 keer in dit bestand.

U kunt grep display het nummer van de lijn voor elke overeenkomende regel met behulp van de-n (nummer van de lijn) optie.

grep -n Jan geek-1.log

Het nummer van de lijn voor elke overeenkomende regel wordt weergegeven aan het begin van de regel.

Om het aantal resultaten die worden weergegeven, gebruikt u de -m (max count) optie. We gaan naar het beperken van de uitvoer naar vijf bijpassende lijnen:

grep -m5 -n Jan geek-1.log

Het Toevoegen Van Context

In staat om een aantal extra regels—eventueel een niet-passende regels—voor elke overeenkomende regel is het vaak nuttig. het kan helpen bij het onderscheiden welke van de gevonden regels zijn degenen waarin u geïnteresseerd bent.

Om te laten zien wat lijnen na de matching-regel, gebruik dan de-A (na context) optie. We vragen voor de drie lijnen in dit voorbeeld:

grep -3 -x – “20-Jan-06 15:24:35” geek-1.log

Om te zien wat lijnen uit voor de corresponderende regel, gebruik je de-B (context voor) optie.

grep -B 3 -x – “20-Jan-06 15:24:35” geek-1.log

En aan de regels van vóór en na de matching-regel gebruikt u de-C (context) optie.

grep -C 3 -x – “20-Jan-06 15:24:35” geek-1.log

Het Tonen Van Bijpassende Bestanden

Om de namen van de bestanden die de zoekterm bevatten, gebruikt u de optie-l (bestanden met de wedstrijd) optie. Om uit te vinden welke C-broncode-bestanden bevatten verwijzingen naar de sl.h header-bestand, gebruik je dit commando:

grep -l “sl.h” *.c

De bestandsnamen worden weergegeven, niet de bijpassende lijnen.

En natuurlijk, we kunnen zoeken naar bestanden die niet zijn voorzien van de zoekterm. De optie-L (bestanden zonder wedstrijd) optie is alleen dat.

grep -L “sl.h” *.c

Begin en Einde van Regels

We kunnen kracht grep alleen display overeenkomt met die in het begin of het einde van een regel. De “^” reguliere expressie operator komt overeen met het begin van een lijn. Vrijwel alle van de regels binnen het log boek bestand wordt spaties bevatten, maar we gaan zoeken naar lijnen die hebben een spatie als eerste karakter:

grep “^ ” geek-1.log

De regels die een spatie als eerste teken—aan het begin van de lijn—worden weergegeven.

Overeenkomen met het einde van de regel, het gebruik van de “$” reguliere expressie operator. We gaan op zoek naar regels die eindigen met “00.”

grep “00$” geek-1.log

Het display toont de regels die “00” hun laatste tekens.

Het gebruik van de Buizen met grep

Natuurlijk, u kunt pijp input voor grep , de pijp van de uitvoer van grep in een ander programma, en hebben grep gelegen in het midden van een buis keten.

Laten we zeggen dat we willen zien van alle exemplaren van de tekenreeks “ExtractParameters” in onze C-broncode-bestanden. Wij weten er wel een paar, zodat we de output met een pijp in minder:

grep “ExtractParameters” *.c | minder

De uitgang wordt gepresenteerd in minder.

Dit kunt u bladeren door de lijst en gebruikt minder van de zoekfunctie.

Als we de output met een pijp van grep in toilet en gebruik de optie-l (lines) optie, kunnen we tellen het aantal regels in de broncode-bestanden bevatten “ExtractParameters”. We kunnen dit bereiken met behulp van de grep -c (tellen) optie, maar dit is een nette manier om aan te tonen leidingen uit grep.)

grep “ExtractParameters” *.c | wc-l

Met de volgende opdracht, we zijn de leidingen van de output van ls in grep en leidingen de uitvoer van grep soort . We zijn een opsomming van de bestanden in de huidige map te selecteren die met de tekenreeks “Aug”, in hen zij, en het sorteren door de grootte van het dossier:

ls -l | grep ‘ Aug ‘ | sort +4n

Laten we breken die naar beneden:

  • ls -l: Uitvoeren van een lang formaat inhoud lijst van de bestanden met behulp van ls.
  • grep “Aug”: Selecteer de regels van de ls lijst die “Aug” in hen. Merk op dat dit ook zou vinden bestanden die “Aug” in hun namen.
  • sorteren +4n: Sorteer de uitvoer van grep op de vierde kolom (bestandsgrootte).

We krijgen een gesorteerde lijst van alle bestanden die zijn gewijzigd in augustus (ongeacht van het jaar), in oplopende volgorde van grootte van het bestand.

GERELATEERD: Hoe te Gebruiken aanbrengen op Linux

grep: Minder een Opdracht, Meer een Bondgenoot

grep is een geweldige applicatie om te hebben tot uw beschikking. Het dateert uit 1974 en is nog steeds sterk, want we moeten wat het doet, en niets doet het beter.

Koppeling grep met een aantal reguliere expressies-fu echt naar het volgende niveau.

GERELATEERD: Hoe Te Gebruiken de Basis Reguliere Expressies te Zoeken Beter en Bespaart Tijd

LEES VERDER

  • “Hoe om Uw 2019 Belastingen Online Voor Gratis
  • “Is Uw Antivirus Echt Bespioneren?
  • “Het Gebruik van de staart Opdracht op Linux
  • “Wi-Fi-6 Is Hier: Moet Je Upgraden naar Wi-Fi-6 in 2020?
  • “Hoe Stel je een Mac voor Je Kinderen