Grep-käsu kasutamine Linuxis
Linux grep
käsk on stringi ja mustriga sobitamise utiliit, mis kuvab mitme faili sobivad read. See töötab ka teiste käskude torustikulise väljundiga. Me näitame teile, kuidas.
Grepi lugu
The grep
käsk on Linuxi ja Unixi ringkondades kuulus kolmel põhjusel. Esiteks on see tohutult kasulik. Teiseks võib valikuvõimalus olla tohutu. Kolmandaks kirjutati see üleöö konkreetse vajaduse rahuldamiseks. Kaks esimest on paugu peal; kolmas on kergelt väljas.
Ken Thompson oli regulaaravaldise otsimisvõimalused rakendusest toim
redaktor (hääldatakse ee-dee) ja lõi tekstifailide otsimiseks väikese programmi enda tarbeks. Tema osakonnajuhataja Bell Labsis Doug Mcilroy pöördus Thompsoni poole ja kirjeldas probleemi, millega üks tema kolleeg Lee McMahon silmitsi seisis.
McMahon üritas tekstianalüüsi abil tuvastada föderalistlike dokumentide autoreid. Ta vajas tööriista, mis otsiks fraase ja stringe tekstifailidest. Thompson veetis sellel õhtul umbes tunni, muutes oma tööriista üldiseks utiliidiks, mida teised saaksid kasutada, ja nimetas selle ümber grep
. Ta võttis selle nime toim
käsurida g / re / lk
, mis tõlgitakse kui "globaalse regulaaravaldise otsimine".
Saate vaadata, kuidas Thompson rääkis Brian Kernighaniga sünnist grep
.
Lihtsad otsingud grepiga
Failis stringi otsimiseks edastage käsureal otsingutermin ja failinimi:
Kuvatakse sobivad read. Sel juhul on see üks rida. Sobiv tekst on esile tõstetud. Seda seetõttu, et enamikul jaotustel grep
on varjunimega:
varjunimi grep = "grep --color = auto"
Vaatame tulemusi, kus on mitu rida, mis sobivad. Otsime rakenduse logifailist sõna „keskmine”. Kuna me ei mäleta, kas see sõna on logifailis väiketähtedega, kasutame seda -i
(ignoreeri juhtumit) variant:
grep -i Keskmine geek-1.log
Kuvatakse iga sobiv rida, kusjuures vastav tekst on igas esile tõstetud.
Mittesobivaid ridu saame kuvada -v (invertsobivus) abil.
grep -v Mem geek-1.log
Esiletõstmist pole, sest need on mittesobivad read.
Me võime põhjustada grep
täiesti vait olla. Tulemus edastatakse kestale tagastusväärtusena grep
. Nulli tulemus tähendab stringi oli leitud ja ühe tulemus tähendab seda ei olnud leitud. Tagastuskoodi saame kontrollida, kasutades $?
eriparameetrid:
grep -q keskmine geek-1.log
kaja $?
grep -q howtogeek geek-1.log
kaja $?
Rekursiivsed otsingud grepiga
Pesastatud kataloogide ja alamkataloogide otsimiseks kasutage valikut -r (rekursiivne). Pange tähele, et te ei anna käsureal failinime, vaid peate sisestama tee. Siin otsime praegusest kataloogist "." ja kõik alamkataloogid:
grep -r -i memfree.
Väljund sisaldab iga sobiva rea kataloogi ja failinime.
Me saame tehagrep
järgige sümboolseid linke, kasutades -R
(rekursiivne dereferents) variant. Selles kataloogis on sümboolne link nimega logid-kaust
. See osutab / home / dave / logid
.
ls -l logib kausta
Kordame oma viimast otsingut-R
(rekursiivne dereferents) variant:
grep -R -i memfree.
Järgitakse sümboolset linki ja otsitakse kataloogi, millele see osutab grep
ka.
Tervete sõnade otsimine
Algselt, grep
sobib reaga, kui otsitav sihtmärk ilmub kusagil sellel real, ka teise stringi sees. Vaadake seda näidet. Otsime sõna "tasuta".
grep -i tasuta geek-1.log
Tulemused on read, milles on string "vaba", kuid need ei ole eraldi sõnad. Need kuuluvad stringi „MemFree”.
Sundima grep
Ainult eraldi sõnade sobitamiseks kasutage -w
(sõna regexp) variant.
grep -w -i tasuta geek-1.log
kaja $?
Seekord pole tulemusi, kuna otsinguterminit "tasuta" ei kuvata failis eraldi sõnana.
Mitme otsingutermini kasutamine
The -E
(laiendatud regexp) valik võimaldab teil otsida mitut sõna. ( -E
Valik asendab iganenud egrep
versioon grep
.)
See käsk otsib kahte otsinguterminit „keskmine” ja „memfree”.
grep -E -w -i "keskmine | memfree" geek-1.log
Kõigi otsinguterminite jaoks kuvatakse kõik sobivad read.
Samuti saate otsida mitut mõistet, mis ei pruugi olla terved sõnad, kuid need võivad olla ka terved sõnad.
The -e
(mustrid) valik võimaldab käsureal kasutada mitut otsinguterminit. Otsingu mustri loomiseks kasutame tavalise avaldise sulgude funktsiooni. See ütleb grep
sobitada ükskõik millises sulgudes sisalduvast märgist „[]”. See tähendab grep
otsingu ajal sobib kas “kB” või “KB”.
Mõlemad stringid on omavahel sobitatud ja tegelikult sisaldavad mõned read mõlemat stringi.
Liinide sobitamine täpselt
The-x
(line regexp) sobib ainult joontega, kus kogu rida vastab otsinguterminile. Otsime kuupäeva- ja ajatemplit, mis teadaolevalt ilmub logifailis ainult üks kord:
grep -x "20. jaanuar - 06 15:24:35" geek-1.log
Leitakse ja kuvatakse üks sobiv rida.
Selle vastand näitab ainult jooni, mis ära tee matš. See võib olla kasulik konfiguratsioonifailide vaatamisel. Kommentaarid on toredad, kuid mõnikord on nende kõigi seas tegelikke seadeid raske märgata. Siin on / etc / sudoers
fail:
Saame tõhusalt välja filtreerida sellised kommentaariread:
sudo grep -v "#" / etc / sudoers
Seda on palju lihtsam sõeluda.
Kuvatakse ainult sobivat teksti
Võib juhtuda, et te ei soovi näha tervet vastavat rida, vaid ainult sobivat teksti. The -o
(ainult sobitamine) variant teeb seda.
grep -o MemFree geek-1.log
Kuvatakse ainult kogu otsingureale vastava teksti kuvamine kogu vaste rea asemel.
Grepiga loendamine
grep
ei puuduta ainult teksti, vaid võib pakkuda ka arvulist teavet. Me saame teha grep
loe meile erinevatel viisidel. Kui tahame teada, mitu korda otsingutermin failis ilmub, saame kasutada -c
(loenda) variant.
grep -c keskmine geek-1.log
grep
teatab, et otsingutermin ilmub selles failis 240 korda.
Saate teha grep
kuvage iga sobiva rea rea number, kasutades nuppu -n
(rea number) valik.
grep -n Jan geek-1.log
Iga sobiva rea rea number kuvatakse rea alguses.
Kuvatavate tulemuste arvu vähendamiseks kasutage nuppu -m
(max arv) variant. Piirame väljundi viie sobiva reaga:
grep -m5 -n Jan geek-1.log
Konteksti lisamine
Tihti on kasulik iga sobiva rea jaoks näha mõnda täiendavat rida - võib-olla mittesobivaid ridu. see võib aidata eristada, millised sobitatud read on need, mis teid huvitavad.
Mõne rea kuvamiseks pärast sobivat joont kasutage -A (pärast konteksti) valikut. Selles näites küsime kolme rida:
grep -A 3 -x "20. jaanuar-06 15:24:35" geek-1.log
Mõne rea leidmiseks enne sobivat joont kasutage klahvi -B
(kontekst enne) variant.
grep -B 3 -x "20. jaanuar-06 15:24:35" geek-1.log
Ja et lisada read enne ja pärast sobitamisjoont, kasutage -C
(kontekst) variant.
grep -C 3 -x "20. jaanuar-06 15:24:35" geek-1.log
Kuvatakse sobivad failid
Otsinguterminit sisaldavate failide nimede nägemiseks kasutage nuppu -L
(vastega failid) valik. Et teada saada, millised C lähtekoodi failid sisaldavad viiteid failile sl.h
päisefail, kasutage seda käsku:
grep -l "sl.h" * .c
Loendis on failinimed, mitte vastavad read.
Ja loomulikult võime otsida faile, mis ei sisalda otsingutermini. The -L
(failid ilma vasteta) teeb seda.
grep -L "sl.h" * .c
Liinide algus ja lõpp
Me võime sundida grep
kuvada ainult vasteid, mis on kas rea alguses või lõpus. Regulaaravaldise operaator “^” vastab rea algusele. Praktiliselt kõik logifaili read sisaldavad tühikuid, kuid otsime ridu, mille esimese märgina on tühik:
grep "^" geek-1.log
Kuvatakse read, mille esimese märgina on tühik - rea alguses.
Rea lõppu sobitamiseks kasutage regulaaravaldise operaatorit $. Otsime ridu, mis lõpevad tähega „00”.
grep "00 $" geek-1.log
Ekraanil kuvatakse read, mille viimasteks märkideks on “00”.
Grepiga torude kasutamine
Muidugi saate sisestada toru grep
, torustage väljund grep
teise programmi ja on grep
pesitses keset toruketti.
Oletame, et soovime näha kõiki C-lähtekoodi failides stringi „ExtractParameters” esinemisi. Me teame, et neid tuleb üsna vähe, nii et me sisestame väljundi vähem
:
grep "ExtractParameters" * .c | vähem
Väljund on esitatud vähem
.
See võimaldab teil sirvida failide loendit ja seda kasutada vähem
otsimisvõimalus.
Kui me torustame väljundi grep
sisse tualett
ja kasutage -L
(read) valiku korral võime lugeda lähtekoodi failide ridade arvu, mis sisaldavad "ExtractParameters". (Selle saavutaksime grep
-c
(count) variant, kuid see on hea viis demonstreerida grep
.)
grep "ExtractParameters" * .c | wc -l
Järgmise käsuga edastame väljundi ls
sisse grep
ja väljundi torustik grep
sisse sorteerida
. Loetleme failid praegusesse kataloogi, valime need, milles on string „Aug”, ja sorteerime need faili suuruse järgi:
ls -l | grep "aug" | sort + 4n
Jaotame selle:
- ls -l: Koostage failide pika vorminguga loend
ls
. - grep "august": Valige read reast
ls
loendis on aug. Pange tähele, et see leiaks ka failid, mille nimes on „Aug”. - sort + 4n: Sorteerige väljund grepist neljandas veerus (failisuurus).
Saame järjestatud loendi kõigist augustis muudetud failidest (sõltumata aastast) failide suuruse kasvavas järjekorras.
SEOTUD:Torude kasutamine Linuxis
grep: vähem käsku, rohkem liitlast
grep
on suurepärane vahend, mis teie käsutuses on. See pärineb aastast 1974 ja on endiselt tugev, sest me vajame seda, mida ta teeb, ja miski ei tee seda paremini.
Sidumine grep
mõne regulaaravaldisega viib fu selle tõesti järgmisele tasandile.
SEOTUD:Kuidas kasutada tavalisi väljendeid paremaks otsimiseks ja aja kokkuhoiuks