Názov uchopenie pochádza z príkazu ed (a vim) g/re/p, čo znamená globálne vyhľadať daný regulárny výraz a vytlačiť (zobraziť) výstup.
Pravidelné Výrazy
Tieto obslužné programy umožňujú používateľovi vyhľadávať v textových súboroch riadky, ktoré sa zhodujú s regulárnym výrazom ( regexp ). Regulárny výraz je vyhľadávací reťazec pozostávajúci z textu a jedného alebo viacerých z 11 špeciálnych znakov. Jednoduchým príkladom je porovnanie začiatku riadka.
Ukážkový súbor
Základná forma uchopenie môžu byť použité na nájdenie jednoduchého textu v konkrétnom súbore alebo súboroch. Ak si chcete vyskúšať príklady, najskôr vytvorte vzorový súbor.
Pomocou editora, ako je nano alebo vim, skopírujte text nižšie do súboru s názvom môj súbor .
xyz
xyzde
exyzd
dexyz
d? gxyz
xxz
xzz
x z
x*z
xz
x z
XYZ
XYYZ
xYz
xyyz
xyyyz
xyyyyz
Napriek tomu, že príklady môžete skopírovať a prilepiť do textu (uvedomte si, že dvojité úvodzovky sa nemusia skopírovať správne), na ich správne naučenie je potrebné napísať príkazy.
Pred vyskúšaním príkladov si pozrite vzorový súbor:
$katmôj súbor
Jednoduché vyhľadávanie
Ak chcete v súbore nájsť text „xyz“, spustite nasledujúce:
$uchopeniexyz môj súborPoužitie farieb
Na zobrazenie farieb použite –color (dvojitý spojovník) alebo jednoducho vytvorte alias. Napríklad:
$uchopenie -farbaxyz môj súboralebo
$prezývka uchopenie= 'uchopenie-farba '$uchopeniexyz môj súbor
možnosti
Bežné možnosti používané s uchopenie príkaz zahrnúť:
- -Nájdem všetky riadky bez ohľadu na to prípadu
- -c počítať koľko riadkov obsahuje text
- -n riadok displeja čísla zhodných riadkov
- -l iba zobrazenie súbor mená ten zápas
- -r rekurzívny vyhľadávanie podadresárov
- -v nájsť všetky riadky NIE obsahujúci text
Napríklad:
$uchopenie -ixyz môj súbor# vyhľadajte text bez ohľadu na prípad$uchopenie -icxyz môj súbor# počet riadkov s textom
$uchopenie -vxyz môj súbor# zobraziť čísla riadkov
Vytvorte viac súborov
Predtým, ako sa pokúsite vyhľadať vo viacerých súboroch, najskôr vytvorte niekoľko nových súborov:
$zahodilxyz>môj súbor1$zahodil -Axyz nxzz nXYZ>môj súbor2
$zahodil -Axxx nyyy>môj súbor3
$katmôj súbor1
$katmôj súbor2
$katmôj súbor3
Hľadať vo viacerých súboroch
Ak chcete vyhľadávať vo viacerých súboroch pomocou názvov súborov alebo zástupných znakov, zadajte:
$uchopenie -icxyz myfile myfile1 myfile2 myfile3$uchopenie -vxyz môj*
# názvy súborov sa začínajú na „moje“
Cvičenie I
- Najprv spočítajte, koľko riadkov je v súbore /etc /passwd.
- Teraz nájdite všetky výskyty textu kde v súbore /etc /passwd .
- Zistite, koľko riadkov v súbore obsahuje text
- Zistite, koľko riadkov NEOBSAHUJE text kde .
- Nájdite záznam pre svoje prihlásenie v /etc/passwd
Riešenia cvičení nájdete na konci tohto článku.
Používanie regulárnych výrazov
Príkaz uchopenie možno tiež použiť s regulárnymi výrazmi pomocou jedného alebo viacerých z jedenástich špeciálnych znakov alebo symbolov na spresnenie vyhľadávania. Regulárny výraz je reťazec znakov, ktorý obsahuje špeciálne znaky, ktoré umožňujú zhody vzorov v rámci obslužných programov, akými sú napr uchopenie , Prišiel som a sed . Všimnite si, že reťazce môže byť potrebné uzavrieť do úvodzoviek.
K dostupným špeciálnym znakom patrí:
^ | Začiatok riadku |
$ | Koniec riadku |
. | Akýkoľvek znak (okrem n nového riadku) |
* | 0 alebo viac predchádzajúceho výrazu |
Predchádzajúce symbol z neho robí doslovný znak |
Všimnite si toho, že *, ktorý sa môže použiť na príkazovom riadku na priradenie ľubovoľného počtu znakov vrátane žiadneho, je nie tu sa používa rovnako.
Všimnite si tiež použitia úvodzoviek v nasledujúcich príkladoch.
Príklady
Ak chcete nájsť všetky riadky začínajúce textom pomocou znaku ^:
$uchopenieMôj súbor „^xyz“Ak chcete nájsť všetky riadky končiace textom pomocou znaku $:
$uchopenieMôj súbor „xyz $“Ak chcete nájsť riadky obsahujúce reťazec pomocou znakov ^ aj $:
$uchopenieMôj súbor „^xyz $“Na vyhľadanie riadkov pomocou . zodpovedať ľubovoľnému znaku:
$uchopenieMôj súbor „^x.z“Ak chcete nájsť riadky pomocou *, ktoré sa zhodujú s 0 alebo viacerými z predchádzajúceho výrazu:
$uchopenie„^Xy*z 'myfileAk chcete nájsť riadky pomocou.* Na zhodenie 0 alebo viacerých znakov:
$uchopenie„^ X.*z 'myfileNa vyhľadanie riadkov pomocou uniknúť znaku *:
$uchopenie„^ X *z 'myfileNa nájdenie znak použite:
$uchopenie„\“ môj súborVýraz grep - egrep
The uchopenie príkaz podporuje iba podmnožinu dostupných regulárnych výrazov. Avšak príkaz egrep:
- umožňuje úplné využitie všetkých regulárnych výrazov
- môže súčasne vyhľadávať viac ako jeden výraz
Uvedomte si, že výrazy musia byť uzavreté do dvojice úvodzoviek.
Ak chcete použiť farby, použite –color alebo znova vytvorte alias:
$prezývka egrep='egrep --color'Ak chcete vyhľadať viac ako jednu regulárny výraz the egrep príkaz môže byť napísaný na viacerých riadkoch. To sa však dá urobiť aj pomocou týchto špeciálnych znakov:
| | Striedanie, jedno alebo druhé |
(…) | Logické zoskupenie časti výrazu |
Zo súboru,. | Sa extrahujú riadky, ktoré začínajú koreňom, uucp alebo poštou symbol znamenajúci jednu z možností.
Nasledujúci príkaz bude nie pracovať, aj keď sa nezobrazuje žiadna správa, pretože základ uchopenie príkaz nepodporuje všetky regulárne výrazy:
$uchopenie '(^root |^uucp |^mail)' /atď/passwdVo väčšine systémov Linux však príkaz grep -E je to isté ako používanie egrep :
$uchopenie -A '(^root |^uucp |^mail)' /atď/passwdPoužitie filtrov
Potrubie je proces odosielania výstupu jedného príkazu ako vstupu do iného príkazu a je jedným z najvýkonnejších dostupných nástrojov Linuxu.
Príkazy, ktoré sa zobrazujú v potrubí, sa často označujú ako filtre, pretože v mnohých prípadoch prechádzajú alebo upravujú vstup, ktorý im bol odoslaný, pred odoslaním upraveného toku na štandardný výstup.
V nasledujúcom príklade štandardný výstup z ls -l sa odovzdáva ako štandardný vstup do súboru uchopenie príkaz. Výstup z uchopenie príkaz je potom odovzdaný ako vstup do súboru viac príkaz.
Zobrazí sa iba adresár vo formáte /atď :
$ls -ten /atď|uchopenie„^D“|viacNasledujúce príkazy sú príkladmi použitia filtrov:
$ps -ef|uchopeniecron $SZO|uchopeniekdmUkážkový súbor
Ak si chcete vyskúšať kontrolu, najskôr vytvorte nasledujúci ukážkový súbor.
Pomocou editora, ako je nano alebo vim, skopírujte text nižšie do súboru s názvom ľudia:
Osobný J. Smith 25 000Osobný E.Smith 25400
Školenie A. Brown 27500
Školenie C.Browen 23400
(Admin) R.Bron 30500
Goodsout T.Smyth 30 000
Osobný F. Jones 25 000
školenie* C.Evans 25500
Goodsout W. Pope 30400
Prízemie T.Smythe 30500
Štáb J. Maler 33000
Cvičenie II
- Zobraziť súbor ľudí a preskúmať jeho obsah.
- Nájdite všetky riadky obsahujúce reťazec Smith v súbore people.Hint: použite príkaz grep, ale pamätajte, že v predvolenom nastavení rozlišujú veľké a malé písmená.
- Vytvorte nový súbor npeople obsahujúci všetky riadky začínajúce reťazcom Osobné v súbore ľudí. Tip: použite príkaz grep s>.
- Potvrďte obsah súboru npeople uvedením súboru.
- Teraz pripojte všetky riadky, kde text končí reťazcom 500 v súbore ľudia do súboru npeople.Rada: použite príkaz grep s >>.
- Opäť potvrďte obsah súboru npeople uvedením súboru.
- Nájdite IP adresu servera, ktorý je uložený v súbore /etc/hosts .Rada: použite príkaz grep s $ (názov hostiteľa)
- Použite egrep extrahovať z /etc/passwd riadky súborového účtu obsahujúce lp alebo svoje vlastné ID používateľa .
Riešenia cvičení nájdete na konci tohto článku.
Viac regulárnych výrazov
Regulárny výraz je možné považovať za zástupné znaky steroidov.
Existuje jedenásť znakov so špeciálnym významom: otváracia a zatváracia hranatá zátvorka [], spätné lomítko , pomlčka ^, znak dolára $, bodka alebo bodka, symbol zvislej čiary alebo fajky |, otáznik?, hviezdička alebo hviezdička *, znamienko plus + a otváracia a zatváracia okrúhla zátvorka {}. Tieto špeciálne znaky sa tiež často nazývajú metaznaky.
Tu je kompletná sada špeciálnych znakov:
^ | Začiatok riadku |
$ | Koniec riadku |
. | Akýkoľvek znak (okrem n nového riadku) |
* | 0 alebo viac predchádzajúceho výrazu |
| | Striedanie, jedno alebo druhé |
[…] | Explicitná sada znakov, ktoré sa majú zhodovať |
+ | 1 alebo viac z predchádzajúceho výrazu |
? | 0 alebo 1 predchádzajúceho výrazu |
Predchádzajúce symbol z neho robí doslovný znak | |
{…} | Explicitný zápis kvantifikátora |
(…) | Logické zoskupenie časti výrazu |
Predvolená verzia uchopenie má iba obmedzenú podporu regulárnych výrazov. Aby všetky nasledujúce príklady fungovali, použite egrep namiesto alebo grep -E .
Na vyhľadanie riadkov pomocou | zodpovedať ktorémukoľvek výrazu:
$egrep„Xxz|xzz ‘môj súborNa vyhľadanie riadkov pomocou | na priradenie ktoréhokoľvek výrazu v reťazci tiež použite ():
$egrep„^ X(Yz|yz)‘Môj súborAk chcete nájsť riadky pomocou [] na priradenie ľubovoľného znaku:
$egrep„^ X[Áno]z 'myfileAk chcete nájsť riadky pomocou [], ktoré NEDÁ zodpovedať žiadnemu znaku:
$egrep„^ X[^ Áno]z 'myfileAk chcete nájsť riadky pomocou *, ktoré sa zhodujú s 0 alebo viacerými z predchádzajúceho výrazu:
$egrep„^Xy*z 'myfileAk chcete nájsť riadky pomocou znamienka +, aby zodpovedalo 1 alebo viacerým predchádzajúcim výrazom:
$egrepMôj súbor „^xy+z“Na vyhľadanie riadkov pomocou? aby zodpovedal 0 alebo 1 predchádzajúceho výrazu:
$egrepMôj súbor „^xy? Z“Cvičenie III
- Nájdite všetky riadky obsahujúce mená Evans alebo maliar v súbore ľudia.
- Nájdite všetky riadky obsahujúce mená Smith, Smyth alebo Smythe v súbore ľudia.
- Nájdite všetky riadky obsahujúce mená Brown, Browen alebo Zdroj v súbore ľudia. Ak máte čas:
- Nájdite riadok obsahujúci reťazec (admin), vrátane zátvoriek, v súbore ľudia.
- Nájdite v súbore ľudia riadok obsahujúci znak *.
- Skombinujte 5 a 6 vyššie a nájdite oba výrazy.
Viac príkladov
Na vyhľadanie riadkov pomocou . a * aby zodpovedali ľubovoľnej množine znakov:
$egrep„^Xy.*z 'myfileAk chcete nájsť riadky pomocou znaku {} zodpovedajúceho počtu N znakov:
$egrep„^Xy{3}z 'myfile$egrep„^Xy{4}z 'myfile
Ak chcete nájsť riadky pomocou {} na priradenie N alebo viackrát:
$egrep„^Xy{3,}z 'myfileAk chcete nájsť riadky pomocou {} tak, aby zodpovedali N -krát, ale nie viac ako M -krát:
$egrep„^Xy{2,3}z 'myfileZáver
V tomto návode sme sa najskôr pozreli na používanie uchopenie v jednoduchej forme nájdete text v súbore alebo vo viacerých súboroch. Hľadaný text sme potom skombinovali s jednoduchými regulárnymi výrazmi a potom pomocou zložitejších egrep .
Ďalšie kroky
Dúfam, že tu získané znalosti dobre využijete. Vyskúšaj uchopenie príkazy na vlastných údajoch a pamätajte, že regulárne výrazy, ako sú tu popísané, je možné použiť v rovnakej forme aj v my , sed a awk !
Cvičebné riešenia
Cvičenie I
Najprv spočítajte, koľko riadkov je v súbore /etc/passwd .
$ wc -l /etc/passwd
Teraz nájdite všetky výskyty textu kde v súbore /etc /passwd.
$ grep var /etc/passwd
Zistite, koľko riadkov v súbore obsahuje text kde
Zistite, koľko riadkov NEOBSAHUJE text kde .
uchopenie -životopiskde/atď/passwdNájdite záznam pre svoje prihlásenie v /etc/passwd súbor
grep kdm /etc/passwd
Cvičenie II
Zobraziť súbor ľudí a preskúmať jeho obsah.
$ cat people
Nájdite všetky riadky obsahujúce reťazec Smith v súbore ľudí .
$ grep 'Smith' people
Vytvorte nový súbor, ľudia , obsahujúci všetky riadky začínajúce reťazcom Osobné v ľudí súbor
$ grep '^Personal' people> npeople
Potvrďte obsah súboru ľudia vypisovaním súboru.
$ cat npeople
Teraz pripojte všetky riadky, kde text končí reťazcom 500 v súbore ľudí do súboru ľudia .
$ grep '500$' people>>npeople
Opäť potvrďte obsah súboru ľudia vypisovaním súboru.
$ cat npeople
Nájdite IP adresu servera, ktorý je uložený v súbore /etc/hosts .
$ grep $(hostname) /etc/hosts
Použite egrep extrahovať z /etc/passwd riadky súborového účtu obsahujúce lp alebo vaše vlastné užívateľské ID.
$ egrep '(lp|kdm:)' /etc/passwd
Cvičenie III
Nájdite všetky riadky obsahujúce mená Evans alebo maliar v súbore ľudí .
$ egrep 'Evans|Maler' people
Nájdite všetky riadky obsahujúce mená Smith , Smyth alebo Smythe v súbore ľudí .
$ egrep 'Sm(i|y)the?' people
Nájdite všetky riadky obsahujúce mená Hnedá , Browen alebo Zdroj v súbore ľudia.
$ egrep 'Brow?e?n' people
Nájdite riadok obsahujúci reťazec (admin), vrátane zátvoriek v súbore ľudí .
Nájdite riadok obsahujúci znak * v súbore ľudia.
$ egrep '*' people
Skombinujte 5 a 6 vyššie a nájdite oba výrazy.