Grep

Perusmuoto

grep "haettava" tiedosto
grep "haettava" *.txt
komento | grep "haettava"

Yleisiä valitsimia

Valitsin Kuvaus
-i Ei väliä kirjainkoolla
-v Käänteinen haku (rivit, joilla EI osumaa)
-r / -R Rekursiivinen haku hakemistopuussa (-R seuraa symlinkkejä)
-n Näytä rivinumero
-c Näytä vain osumien lukumäärä
-l Näytä vain tiedostonimet, joissa osuma
-L Näytä tiedostonimet, joissa EI osumaa
-w Vaadi koko sana
-x Vaadi koko rivin täsmäys
-o Tulosta vain täsmäävä osa, ei koko riviä
-A n / -B n Näytä n riviä osuman jälkeen / ennen
-C n Näytä n riviä molemmin puolin
-E Laajennettu regex (sama kuin egrep)
-F Kirjaimellinen merkkijonohaku, ei regexiä (sama kuin fgrep)
-e Anna useampi hakulauseke
-q Hiljainen: käytä vain poistumiskoodia (skripteissä)

Esimerkkejä

grep -rn "TODO" src/                  # etsi TODO-kommentit rekursiivisesti
grep -riL "copyright" *.md            # tiedostot, joista puuttuu sana
grep -E "virhe|error" loki.txt        # useampi vaihtoehto kerralla
ps aux | grep -i python               # käynnissä olevat python-prosessit
grep -c "^#" tiedosto.py              # kommenttirivien määrä
grep -o "IP: [0-9.]*" loki.txt        # poimi vain osumat, ei koko riviä
grep -rl "vanha-nimi" . | xargs sed -i 's/vanha-nimi/uusi-nimi/g'   # GNU sed; macOS:n BSD-sed vaatii: sed -i '' 's/.../.../ '
grep --include="*.py" -rn "import os" .   # rajaa tiedostotyyppiin
grep --exclude-dir=node_modules -rn "TODO" .

Useampi hakulauseke

grep -e "virhe" -e "varoitus" loki.txt
grep -f haut.txt tiedosto              # hakulausekkeet tiedostosta, rivi kerrallaan

Regex-perusteet grepissä

Merkki Kuvaus
. Mikä tahansa merkki
* Edellinen merkki 0-n kertaa
+ (vain -E:llä) Edellinen merkki 1-n kertaa
? (vain -E:llä) Edellinen merkki 0-1 kertaa
^ / $ Rivin alku / loppu
[abc] Jokin merkeistä a, b, c
[^abc] Mikä tahansa muu kuin a, b, c
[0-9] Numeroalue
\d, \w, \s (vain -P:llä) numero, sana- tai tyhjämerkki
\| (vain -E:llä) Vaihtoehto
{n,m} (vain -E:llä) Toistokerrat n-m

PCRE (Perl-yhteensopiva regex)

grep -P "(?<=IP: )\d+\.\d+\.\d+\.\d+" loki.txt   # katsomaehto (lookbehind)

-P ei ole saatavilla kaikissa grep-toteutuksissa (esim. macOS:n oletus-BSD-grepistä puuttuu — asenna tarvittaessa GNU grep: brew install grep).

Pakatut tiedostot

zgrep "haettava" loki.gz     # hae pakatusta tiedostosta purkamatta sitä ensin