Název grep pochází z příkazu ed (a vim) „g / re / p“, což znamená globálně vyhledat daný regulární výraz a vytisknout (zobrazit) výstup.
Pravidelný Výrazy
Obslužné programy umožňují uživateli hledat v textových souborech řádky, které odpovídají regulárnímu výrazu (regulární výraz). Regulární výraz je vyhledávací řetězec složený z textu a jednoho nebo více z 11 speciálních znaků. Jednoduchým příkladem je shoda začátku řádku.
Ukázkový soubor
Základní forma grep lze použít k vyhledání jednoduchého textu v konkrétním souboru nebo souborech. Chcete-li vyzkoušet příklady, nejprve vytvořte ukázkový soubor.
Pomocí editoru, jako je nano nebo vim, zkopírujte níže uvedený text do souboru s názvem myfile.
xyzxyzde
exyzd
dexyz
d?gxyz
xxz
xzz
x \ z
x * z
xz
x z
XYZ
XYYZ
xYz
xyyz
xyyyz
xyyyyz
I když můžete příklady zkopírovat a vložit do textu (všimněte si, že uvozovky se nemusí správně kopírovat), aby se je správně naučily, je třeba zadat příkazy.
Než vyzkoušíte příklady, zobrazte ukázkový soubor:
$ cat myfile
Jednoduché vyhledávání
Chcete-li v souboru najít text „xyz“, postupujte takto:
$ grep xyz myfile
Používání barev
Chcete-li zobrazit barvy, použijte -color (dvojitá pomlčka) nebo jednoduše vytvořte alias. Například:
$ grep --color xyz myfilenebo
$ alias grep = 'grep --color'$ grep xyz myfile
Možnosti
Běžné možnosti používané s grep příkaz obsahuje:
- -najdu všechny řádky nehledě na to případu
- -C počet kolik řádků obsahuje text
- -n řádek displeje čísla odpovídajících řádků
- -Zobrazuji pouze soubor jména ten zápas
- -r rekurzivní hledání podadresářů
- -v najít všechny řádky NE obsahující text
Například:
$ grep -i xyz myfile # najít text bez ohledu na velikost písmen$ grep -ic xyz myfile # počet řádků s textem
$ grep -in xyz myfile # zobrazit čísla řádků
Vytvořte více souborů
Než se pokusíte prohledat více souborů, nejprve vytvořte několik nových souborů:
$ echo xyz> myfile1$ echo -e „xyz \ nxzz \ nXYZ“> můjsoubor2
$ echo -e „xxx \ nyyy“> můjsoubor3
$ cat myfile1
$ cat myfile2
$ cat myfile3
Prohledat více souborů
Chcete-li vyhledat více souborů pomocí názvů souborů nebo zástupných znaků, zadejte:
$ grep -ic xyz myfile myfile1 myfile2 myfile3$ grep -in xyz my *
# shodné názvy souborů začínající na „moje“
Cvičení I
- Nejprve spočítejte, kolik řádků je v souboru / etc / passwd.
- Nyní najděte všechny výskyty textu var v souboru / etc / passwd.
- Zjistěte, kolik řádků v souboru obsahuje text
- Zjistěte, kolik řádků NENÍ v textu var.
- Najděte přihlašovací údaje v / etc / passwd
Řešení cvičení najdete na konci tohoto článku.
Používání regulárních výrazů
Příkaz grep lze také použít s regulárními výrazy pomocí jednoho nebo více z jedenácti speciálních znaků nebo symbolů k upřesnění vyhledávání. Regulární výraz je řetězec znaků, který obsahuje speciální znaky, které umožňují porovnávání vzorů v nástrojích, jako je grep, vim a sed. Řetězce může být nutné uvést v uvozovkách.
Mezi speciální znaky patří:
^ | Začátek řádku |
$ | Konec řádku |
. | Libovolný znak (kromě \ n nového řádku) |
* | 0 nebo více předchozího výrazu |
\ | Předcházející symbol z něj dělá doslovný znak |
Všimněte si, že *, které lze na příkazovém řádku použít k porovnání libovolného počtu znaků včetně žádného, je ne používá se zde stejným způsobem.
Všimněte si také použití uvozovek v následujících příkladech.
Příklady
Vyhledání všech řádků začínajících textem pomocí znaku ^:
$ grep '^ xyz' myfileVyhledání všech řádků končících textem pomocí znaku $:
$ grep 'xyz $' myfileVyhledání řádků obsahujících řetězec pomocí znaků ^ i $:
$ grep '^ xyz $' myfileHledání řádků pomocí . aby odpovídala libovolnému znaku:
$ grep '^ x.můj soubor
Vyhledání řádků pomocí znaku *, který odpovídá 0 nebo více předchozím výrazům:
$ grep '^ xy * z' myfileNajít řádky pomocí .* odpovídající 0 nebo více libovolným znakům:
$ grep '^ x.* z 'myfileHledání řádků pomocí \ uniknout znaku *:
$ grep '^ x \ * z' myfileChcete-li najít znak \ použijte:
$ grep '\\' myfile
Výraz grep - egrep
The grep příkaz podporuje pouze podmnožinu regulárních výrazů, které jsou k dispozici. Příkaz egrep:
- umožňuje plné využití všech regulárních výrazů
- může současně hledat více než jeden výraz
Upozorňujeme, že výrazy musí být uzavřeny v uvozovkách.
Chcete-li použít barvy, použijte -color nebo znovu vytvořte alias:
$ alias egrep = 'egrep --color'Za účelem vyhledávání více než jednoho regulární výraz the egrep příkaz může být napsán na více řádcích. To však lze provést také pomocí těchto speciálních znaků:
| | Střídání, buď jedno, nebo druhé |
(…) | Logické seskupení části výrazu |
Toto extrahuje řádky, které začínají kořenem, uucp nebo poštou ze souboru, | symbol, který znamená jednu z možností.
Následující příkaz bude ne práce, i když se nezobrazí žádná zpráva, protože základní grep příkaz nepodporuje všechny regulární výrazy:
$ grep '(^ root | ^ uucp | ^ mail)' / etc / passwdVe většině systémů Linux však příkaz grep -E je stejné jako použití egrep:
$ grep -E '(^ root | ^ uucp | ^ mail)' / etc / passwd
Pomocí filtrů
Potrubí je proces odesílání výstupu jednoho příkazu jako vstupu do jiného příkazu a je jedním z nejsilnějších dostupných nástrojů Linuxu.
Příkazy, které se objevují v kanálu, se často označují jako filtry, protože v mnoha případech před odesláním upraveného streamu na standardní výstup projdou nebo upraví vstup, který jim byl předán.
V následujícím příkladu standardní výstup z je -l je předán jako standardní vstup do grep příkaz. Výstup z grep příkaz je poté předán jako vstup do více příkaz.
Zobrazí se pouze adresáře v /atd:
$ ls -l / etc | grep '^ d' | další
Následující příkazy jsou příklady použití filtrů:
$ ps -ef | grep cron$ who | grep kdm
Ukázkový soubor
Chcete-li vyzkoušet cvičení kontroly, nejprve vytvořte následující ukázkový soubor.
Pomocí editoru, jako je nano nebo vim, zkopírujte níže uvedený text do souboru s názvem lidé:
Osobní J.Smith 25000Osobní E.Smith 25400
Školení A.Hnědá 27500
Školení C.Prohlížet 23400
(Správce) R.Bron 30500
Goodsout T.Smyth 30000
Osobní F.Jones 25000
školení * C.Evans 25500
Goodsout W.Papež 30400
Přízemí T.Smythe 30500
Osobní J.Maler 33000
Cvičení II
- Zobrazte soubor lidé a prozkoumat jeho obsah.
- Najděte všechny řádky obsahující řetězec Kovář ve složce lidé.Tip: použijte příkaz grep, ale pamatujte, že se ve výchozím nastavení rozlišují velká a malá písmena.
- Vytvořte nový soubor npeople obsahující všechny řádky začínající řetězcem Osobní v souboru lidí.Tip: použijte příkaz grep s>.
- Potvrďte obsah souboru npeople vypsáním souboru.
- Nyní připojte všechny řádky tam, kde text končí řetězcem 500 v souboru lidé do souboru npeople.Tip: použijte příkaz grep s >>.
- Znovu potvrďte obsah souboru npeople vypsáním souboru.
- Najděte adresu IP serveru, který je uložen v souboru / etc / hosts.Tip: použijte příkaz grep s $ (název hostitele)
- Použití egrep extrahovat z / etc / passwd řádky účetního souboru obsahující lp nebo vaše vlastní uživatelské ID.
Řešení cvičení najdete na konci tohoto článku.
Více regulárních výrazů
Regulární výraz lze považovat za zástupné znaky na steroidech.
Existuje jedenáct znaků se zvláštním významem: úvodní a závěrečná hranatá závorka [], zpětné lomítko \, stříška ^, znak dolaru $, tečka nebo tečka ., symbol svislé čáry nebo potrubí |, otazník ?, hvězdička nebo hvězda *, znaménko plus + a úvodní a závěrečná kulatá závorka . Tyto speciální znaky se také často nazývají metaznaky.
Zde je celá sada speciálních znaků:
^ | Začátek řádku |
$ | Konec řádku |
. | Libovolný znak (kromě \ n nového řádku) |
* | 0 nebo více předchozího výrazu |
| | Střídání, buď jedno, nebo druhé |
[…] | Výslovná sada odpovídajících znaků |
+ | 1 nebo více předchozích výrazů |
? | 0 nebo 1 předchozího výrazu |
\ | Předcházející symbol z něj dělá doslovný znak |
… | Explicitní notace kvantifikátoru |
(…) | Logické seskupení části výrazu |
Výchozí verze grep má pouze omezenou podporu regulárních výrazů. Aby všechny následující příklady fungovaly, použijte egrep místo toho nebo grep -E.
Hledání řádků pomocí | odpovídající jednomu z výrazů:
$ egrep 'xxz | xzz' můj souborVyhledání řádků pomocí | pro shodu jednoho z výrazů v řetězci použijte také ():
$ egrep '^ x (Yz | yz)' můjsoubor
Vyhledání řádků pomocí [] k vyhledání libovolného znaku:
$ egrep '^ x [Yy] z' myfileChcete-li najít řádky pomocí [], aby NENÍ shodný žádný znak:
$ egrep '^ x [^ Yy] z' můjsouborVyhledání řádků pomocí znaku *, který odpovídá 0 nebo více předchozím výrazům:
$ egrep '^ xy * z' myfile
Vyhledání řádků pomocí znaku +, který odpovídá 1 nebo více předchozím výrazům:
$ egrep '^ xy + z' myfileHledání řádků pomocí ? aby odpovídalo 0 nebo 1 předchozího výrazu:
$ egrep '^ xy?můj soubor
Cvičení III
- Najděte všechny řádky obsahující jména Evans nebo Maler ve složce lidé.
- Najděte všechny řádky obsahující jména Smith, Smyth nebo Smythe ve složce lidé.
- Najděte všechny řádky obsahující jména Brown, Browen nebo Bron ve složce lidé.Pokud máš čas:
- Najděte řádek obsahující řetězec (správce), včetně závorek v souboru lidé.
- Najděte řádek obsahující znak * v souboru people.
- Kombinujte 5 a 6 výše a najděte oba výrazy.
Další příklady
Najít řádky pomocí . a *, aby odpovídaly libovolné sadě znaků:
$ egrep '^ xy.* z 'myfileVyhledání řádků pomocí , aby odpovídaly N počtu znaků:
$ egrep '^ xy 3 z' myfile$ egrep '^ xy 4 z' myfile
Vyhledání řádků pomocí k párování N nebo vícekrát:
$ egrep '^ xy 3, z' můjsouborVyhledání řádků pomocí k párování N-krát, ale ne více než M-krát:
$ egrep '^ xy 2,3 z' můjsoubor
Závěr
V tomto kurzu jsme se nejprve podívali na použití grep v jeho jednoduché formě najdete text v souboru nebo ve více souborech. Poté jsme text, který má být vyhledán, zkombinovali s jednoduchými regulárními výrazy a poté s použitím složitějších egrep.
Další kroky
Doufám, že zde získané znalosti dobře využijete. Vyzkoušet grep příkazy na vaše vlastní data a pamatujte, že regulární výrazy, jak jsou zde popsány, lze použít ve stejné formě v vi, sed a awk!
Řešení cvičení
Cvičení I
Nejprve spočítejte, kolik řádků je v souboru / etc / passwd.$ wc -l / etc / passwd
Nyní najděte všechny výskyty textu var v souboru / etc / passwd.$ grep var / etc / passwd
Zjistěte, kolik řádků v souboru obsahuje text var
Zjistěte, kolik řádků NENÍ v textu var.
grep -cv var / etc / passwdNajděte přihlašovací údaje v / etc / passwd souborgrep kdm / etc / passwd
Cvičení II
Zobrazte soubor lidé a prozkoumat jeho obsah.$ kočičí lidé
Najděte všechny řádky obsahující řetězec Kovář v souboru lidé.$ grep 'Smith' lidí
Vytvořte nový soubor, lidé, obsahující všechny řádky začínající řetězcem Osobní v lidé soubor$ grep '^ Personal' people> npeople
Potvrďte obsah souboru lidé vypsáním souboru.$ kočičí lidé
Nyní připojte všechny řádky tam, kde text končí řetězcem 500 v souboru lidé do souboru lidé.$ grep '500 $' lidí >> lidé
Znovu potvrďte obsah souboru lidé vypsáním souboru.$ kočičí lidé
Najděte adresu IP serveru, který je uložen v souboru / etc / hosts.$ grep $ (název hostitele) / etc / hosts
Použití egrep extrahovat z / etc / passwd řádky účetního souboru obsahující lp nebo vaše vlastní ID uživatele.$ egrep '(lp | kdm :)' / etc / passwd
Cvičení III
Najděte všechny řádky obsahující jména Evans nebo Maler v souboru lidé.$ egrep 'Evans | Maler' lidé
Najděte všechny řádky obsahující jména Kovář, Smyth nebo Smythe v souboru lidé.$ egrep 'Sm (i | y)?„lidi
Najděte všechny řádky obsahující jména Hnědý, Browen nebo Bron ve složce lidé.$ egrep 'Brow?E?lidi
Najděte řádek obsahující řetězec (správce), včetně závorek v souboru lidé.
Najděte řádek obsahující znak * ve složce lidé.$ egrep '\ *' lidí
Kombinujte 5 a 6 výše a najděte oba výrazy.