Grep Command Tutorial - Hvordan søke etter en fil i Linux og Unix med Recursive Find
grep
står for Globally Search For Regular Expression og Print out . Det er et kommandolinjeverktøy som brukes i UNIX- og Linux-systemer for å søke i et spesifisert mønster i en fil eller gruppe av filer.
grep
kommer med mange alternativer som lar oss utføre forskjellige søkerelaterte handlinger på filer. I denne artikkelen vil vi se på hvordan du bruker grep
de tilgjengelige alternativene, samt grunnleggende regulære uttrykk for å søke i filer.
Hvordan å bruke grep
Uten å passere noe alternativ, grep
kan det brukes til å søke etter et mønster i en fil eller gruppe av filer. Syntaksen er:
grep ''
Vær oppmerksom på at det er nødvendig med enkle eller doble anførselstegn rundt teksten hvis det er mer enn ett ord.
Du kan også bruke jokertegnet (*) til å velge alle filer i en katalog.
Resultatet av dette er forekomsten av mønsteret (ved linjen det er funnet) i filen (e). Hvis det ikke samsvarer, vil ingen utskrifter skrives ut til terminalen.
Si for eksempel at vi har følgende filer (kalt grep.txt):
Hello, how are you I am grep Nice to meet you
Følgende grep
kommando vil søke etter alle forekomster av ordet 'du':
grep you grep.txt
Resultatet for dette er:
Hello, how are you Nice to meet you
you
forventes å ha en annen farge enn den andre teksten for å enkelt identifisere hva det ble søkt etter.
Men grep
har flere alternativer som hjelper oss å oppnå mer under en søkeoperasjon. La oss se på ni av dem mens vi bruker dem på eksemplet ovenfor.
Alternativer brukt med grep
1. -n
(--linjenummer) - viser linjenumre
Dette skriver ut treff for teksten sammen med linjenumrene. Hvis du ser på resultatet vi har ovenfor, vil du merke at det ikke er linjenumre, bare kampene.
grep you grep.txt -n
Resultat:
1: Hello, how are you 3: Nice to meet you
2. -c
(--count) - skriver ut antall linjer med treff
grep you grep.txt -c
Resultat:
2
Merk at hvis det var et annet "deg" på linje en, -c
ville alternativet fortsatt skrive ut 2. Dette er fordi det er opptatt av antall linjer der treffene vises, ikke antall treff.
3. -v
(--invert-match) - skriver ut linjene som ikke samsvarer med det angitte mønsteret
grep you grep.txt -v -n
Resultat:
2. I am grep
Legg merke til at vi også brukte alternativ -n
? Ja, du kan bruke flere alternativer i en kommando.
4. -i
(--ignore-case) - brukes til sak ufølsomhet
# command 1 grep You grep.txt # command 2 grep YoU grep.txt -i
Resultater:
# result 1 # no result # result 2 Hello, how are you Nice to meet you
5. -l
(--files-with-matches) - skriv ut filnavn som samsvarer med et mønster
# command 1 grep you grep.txt -l # command 2 grep You grep.txt -i -l
Resultater:
# result 1 grep.txt # result 2 # all files in the current directory that matches # the text 'You' case insensitively
#### 6. `-w` (--word-regexp) - print matches of the whole word
Som standard grep
matcher strenger som inneholder det angitte mønsteret. Dette betyr at grep yo grep.txt
vil skrive ut de samme resultatene som grep yo grep.txt
fordi "yo" kan bli funnet i deg. Tilsvarende 'ou'.
Med alternativet -w
, grep
sørger det for at fyrstikkene er nøyaktig det samme mønsteret som spesifisert. Eksempel:
grep yo grep.txt -w
Resultat:
Inget resultat!
7. -o
(--only-matching) - skriv bare ut det matchede mønsteret
Skriver som standard grep
ut linjen der det matchede mønsteret er funnet. Med alternativ -o
blir bare det matchede mønsteret skrevet ut linje for linje. Eksempel:
grep yo grep.txt -o
Resultat:
yo
8. -A
(--after-context) og -B
(--before-context) - skriv ut linjene etter og før (henholdsvis) det matchede mønsteret
grep grep grep.txt -A 1 -B 1
Resultat:
Hello, how are you I am grep Nice to meet you
Dette matchede mønsteret er på linje 2. -A 1
betyr en linje etter den samsvarende linjen og -B 1
betyr en linje før den matchede linjen.
Det er også et -C
(--context) alternativ som er lik -A
+ -B
. Verdien som sendes til -C
vil bli brukt til -A
og -B
.
9. -R
(--ereference-rekursiv) - rekursivt søk
grep
Kan som standard ikke søke i kataloger. Hvis du prøver å gjøre det, får du en feil ("Er en katalog"). Med alternativ -R
blir søking av filer i kataloger og underkataloger mulig. Eksempel:
grep you .
Resultat:
# 'you' matches in a folders # and files starting from the # current directory
Regelmessige uttrykk for mønstre
grep
tillater også grunnleggende regulære uttrykk for å spesifisere mønstre. To av dem er:
1. ^pattern
- start på en linje
Dette mønsteret betyr at grep
vil matche strengene hvis linjer begynner med strengen spesifisert etter ^
. Eksempel:
grep ^I grep.txt -n
Resultat:
2: I
2. pattern$
- slutten på en linje
I motsetning til ^
, $
spesifiserer mønstre som vil bli matchet hvis linjen ender med strengen før $
. Eksempel:
grep you$ grep.txt
Resultat:
1: Hello, how are you 3: Nice to meet you
Pakk opp
grep
er et kraftig verktøy for å søke etter filer i terminalen. Å forstå hvordan du bruker den gir deg muligheten til enkelt å finne filer via terminalen.
Det er flere alternativer knyttet til dette verktøyet. Du kan finne med man grep
.