Název rukojeť 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
Nástroje umožňují uživateli vyhledávat v textových souborech řádky, které odpovídají regulárnímu výrazu ( regexp ). 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 přiřazení začátku řádku.
Ukázkový soubor
Základní forma rukojeť lze použít k nalezení 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 můj soubor .
xyz
xyzde
exyzd
dexyz
d? gxyz
xxz
xzz
x z
x*z
xz
x z
XYZ
XYYZ
xYz
xyyz
xyyyz
xyyyyz
Ačkoli můžete zkopírovat a vložit příklady do textu (všimněte si, že dvojité uvozovky se nemusí kopírovat správně), příkazy je nutné zadat, abyste se je správně naučili.
Před vyzkoušením příkladů si prohlédněte ukázkový soubor:
$kočkamůj soubor
Jednoduché vyhledávání
Chcete -li v souboru najít text „xyz“, spusťte následující:
$rukojeťxyz myfilePoužívání barev
K zobrazení barev použijte –color (dvojitou pomlčku) nebo jednoduše vytvořte alias. Například:
$rukojeť --barvaxyz myfilenebo
$alias rukojeť= ‘rukojeť--barva'$rukojeťxyz myfile
Možnosti
Běžné možnosti používané s rukojeť příkaz zahrnovat:
- -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ů
- -l pouze zobrazení soubor jména ten zápas
- -r rekurzivní vyhledávání podadresářů
- -v najít všechny řádky NE obsahující text
Například:
$rukojeť -ixyz myfile# najděte text bez ohledu na případ$rukojeť -icxyz myfile# počet řádků s textem
$rukojeť -vxyz myfile# zobrazit čísla řádků
Vytvořte více souborů
Než se pokusíte vyhledat více souborů, nejprve vytvořte několik nových souborů:
$vyhodilxyz>můj soubor1$vyhodil -Axyz nxzz nXYZ>myfile2
$vyhodil -Axxx nyyy>můj soubor3
$kočkamůj soubor1
$kočkamyfile2
$kočkamůj soubor3
Hledat ve více souborech
Chcete -li vyhledávat ve více souborech pomocí názvů souborů nebo zástupných znaků, zadejte:
$rukojeť -icxyz myfile myfile1 myfile2 myfile3$rukojeť -vxyz můj*
# shoduje se 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 kde v souboru /etc /passwd .
- Zjistěte, kolik řádků v souboru obsahuje text
- Zjistěte, kolik řádků NEOBSAHUJE text kde .
- Najděte položku pro své přihlášení v /etc/passwd
Řešení cvičení najdete na konci tohoto článku.
Používání regulárních výrazů
Příkaz rukojeť lze také použít s regulárními výrazy použitím 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í shodu vzorů v nástrojích, jako je například rukojeť , přišel jsem a sed . Všimněte si, že řetězce mohou být nutné uzavřít do uvozovek.
Mezi dostupné 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 činí doslovný znak |
Všimněte si, že *, který může být použit na příkazovém řádku tak, aby odpovídal libovolnému počtu znaků, včetně žádného, je ne zde se používá stejným způsobem.
Všimněte si také použití uvozovek v následujících příkladech.
Příklady
Chcete -li najít všechny řádky začínající textem pomocí znaku ^:
$rukojeť‚^Xyz‘ myfileChcete -li najít všechny řádky končící textem pomocí znaku $:
$rukojeť‚Xyz $‘ myfileChcete -li najít řádky obsahující řetězec pomocí znaků ^ i $:
$rukojeť‚^Xyz $‘ myfileK vyhledání řádků pomocí . odpovídat libovolnému znaku:
$rukojeť‚^X.z‘ myfileChcete -li najít řádky pomocí * pro shodu 0 nebo více předchozího výrazu:
$rukojeť„^Xy*z’ myfileChcete -li najít řádky pomocí.* Tak, aby odpovídaly 0 nebo více znakům:
$rukojeť„^ X.*z’ myfileK vyhledání řádků pomocí uniknout znaku *:
$rukojeť„^ X *z’ myfileChcete -li najít znak , použijte:
$rukojeť'\' myfileVýraz grep - egrep
The rukojeť příkaz podporuje pouze podmnožinu regulárních výrazů, které jsou k dispozici. Nicméně příkaz egrep:
- umožňuje plné využití všech regulárních výrazů
- může současně vyhledávat více než jeden výraz
Všimněte si, že výrazy musí být uzavřeny do dvojice uvozovek.
Chcete -li použít barvy, použijte –color nebo znovu vytvořte alias:
$alias egrep='egrep --color'Chcete -li vyhledat více než jednu regex the egrep příkaz může být zapsán na více řádků. 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 |
To extrahuje řádky začínající kořenem, uucp nebo poštou ze souboru | symbol znamenající některou z možností.
Následující příkaz bude ne práce, přestože se nezobrazuje žádná zpráva, protože základní rukojeť příkaz nepodporuje všechny regulární výrazy:
$rukojeť '(^root |^uucp |^mail)' /atd/passwdNa většině systémů Linux však příkaz grep -E je stejné jako použití egrep :
$rukojeť -A '(^root |^uucp |^mail)' /atd/passwdPomocí filtrů
Potrubí je proces odesílání výstupu jednoho příkazu jako vstupu do jiného příkazu a je jedním z nejvýkonnějších dostupných nástrojů Linuxu.
Příkazy, které se objevují v kanálu, jsou často označovány jako filtry, protože v mnoha případech procházejí nebo upravují vstup, který jim byl před odesláním upraveného proudu odeslán na standardní výstup.
V následujícím příkladu standardní výstup z ls -l je předán jako standardní vstup do rukojeť příkaz. Výstup z rukojeť příkaz je poté předán jako vstup do souboru více příkaz.
Zobrazí se pouze adresáře v /atd :
$ls -ten /atd|rukojeť'^D'|víceNásledující příkazy jsou příklady použití filtrů:
$ps -ef|rukojeťcron $SZO|rukojeťkdmUkázkový soubor
Abyste si mohli vyzkoušet revizi, 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 25 000Osobní E.Smith 25400
Školení A. Brown 27500
Školení C.Browen 23400
(Správce) R.Bron 30500
Goodsout T.Smyth 30 000
Osobní F. Jones 25 000
školení* C. Evan 25500
Goodsout W. Pope 30400
Přízemí T.Smythe 30500
Zaměstnanci J. Maler 33000
Cvičení II
- Zobrazit soubor lidé a prozkoumejte jeho obsah.
- Najděte všechny řádky obsahující řetězec Kovář v souboru people.Hint: použijte příkaz grep, ale pamatujte, že 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, kde text končí řetězcem 500 v souboru people to the file npeople. Tip: použijte příkaz grep s >>.
- Znovu potvrďte obsah souboru npeople uvedením souboru.
- Najděte IP adresu 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 souborového účtu obsahující lp nebo 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 steroidů.
Existuje jedenáct znaků se zvláštními významy: otevírací a zavírací hranaté závorky [], zpětné lomítko , stříška ^, znak dolaru $, tečka nebo tečka, svislý pruh nebo symbol potrubí |, otazník?, hvězdička nebo hvězdička *, znaménko plus + a otevírací a zavírací kulatá závorka {}. Tyto speciální znaky se také často nazývají metaznaky.
Zde je kompletní 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é |
[…] | Explicitní sada odpovídajících znaků |
+ | 1 nebo více z předchozího výrazu |
? | 0 nebo 1 předchozího výrazu |
Předcházející symbol z něj činí doslovný znak | |
{…} | Explicitní zápis kvantifikátoru |
(…) | Logické seskupení části výrazu |
Výchozí verze rukojeť má pouze omezenou podporu regulárních výrazů. Aby všechny následující příklady fungovaly, použijte egrep místo nebo grep -E .
K vyhledání řádků pomocí | aby odpovídal jakémukoli výrazu:
$egrep‘Xxz|xzz ‘myfileK vyhledání řádků pomocí | pro shodu buď výrazu v řetězci také použijte ():
$egrep„^ X(Yz|yz)‘Můj souborChcete -li najít řádky pomocí [], aby odpovídaly libovolnému znaku:
$egrep„^ X[Ano]z’ myfileChcete -li najít řádky pomocí [], které NEodpovídají žádnému znaku:
$egrep„^ X[^ Ano]z’ myfileChcete -li najít řádky pomocí * pro shodu 0 nebo více předchozího výrazu:
$egrep„^Xy*z’ myfileChcete -li najít řádky pomocí +, aby odpovídaly 1 nebo více předchozímu výrazu:
$egrepMůj soubor „^xy+z“Chcete -li najít řádky pomocí? aby odpovídalo 0 nebo 1 předchozího výrazu:
$egrep‚^Xy? Z‘ myfileCvičení III
- Najděte všechny řádky obsahující jména Evans nebo malíř v souboru lidí.
- Najděte všechny řádky obsahující jména Smith, Smyth nebo Smythe v souboru lidí.
- Najděte všechny řádky obsahující jména Brown, Browen nebo Zdroj v souboru people.If you have time:
- Najděte řádek obsahující řetězec (admin), včetně závorek v souboru lidí.
- Najděte v souboru lidí řádek obsahující znak *.
- Zkombinujte 5 a 6 výše, abyste našli oba výrazy.
Další příklady
K vyhledání řádků pomocí . a * aby odpovídaly libovolné sadě znaků:
$egrep„^Xy.*z’ myfileChcete -li najít řádky pomocí {}, které odpovídají počtu N znaků:
$egrep„^Xy{3}z’ myfile$egrep„^Xy{4}z’ myfile
Chcete -li najít řádky pomocí {} tak, aby odpovídaly N nebo vícekrát:
$egrep„^Xy{3,}z’ myfileChcete -li najít řádky pomocí {} tak, aby odpovídaly N krát, ale ne více než M krát:
$egrep„^Xy{2,3}z’ myfileZávěr
V tomto tutoriálu jsme se nejprve podívali na používání rukojeť v jednoduché formě najdete text v souboru nebo ve více souborech. Hledaný text jsme poté spojili s jednoduchými regulárními výrazy a poté pomocí složitějších egrep .
Další kroky
Doufám, že zde získané znalosti dobře využijete. Vyzkoušet rukojeť příkazy na vašich vlastních datech a pamatujte, regulární výrazy, jak jsou zde popsány, lze použít ve stejné formě v my , sed a awk !
Cvičení řeš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 kde v souboru /etc /passwd.
$ grep var /etc/passwd
Zjistěte, kolik řádků v souboru obsahuje text kde
Zjistěte, kolik řádků NEOBSAHUJE text kde .
rukojeť -životopiskde/atd/passwdNajděte položku pro své přihlášení v /etc/passwd soubor
grep kdm /etc/passwd
Cvičení II
Zobrazit soubor lidé a prozkoumejte jeho obsah.
$ cat people
Najděte všechny řádky obsahující řetězec Kovář v souboru lidé .
$ grep 'Smith' people
Vytvořte nový soubor, n lidí , obsahující všechny řádky začínající řetězcem Osobní v lidé soubor
$ grep '^Personal' people> npeople
Potvrďte obsah souboru n lidí vypsáním souboru.
$ cat npeople
Nyní připojte všechny řádky, kde text končí řetězcem 500 v souboru lidé do souboru n lidí .
$ grep '500$' people>>npeople
Znovu potvrďte obsah souboru n lidí vypsáním souboru.
$ cat npeople
Najděte IP adresu serveru, který je uložen v souboru /etc/hosts .
$ grep $(hostname) /etc/hosts
Použití egrep extrahovat z /etc/passwd řádky souborového účtu obsahující lp nebo vaše vlastní uživatelské ID.
$ egrep '(lp|kdm:)' /etc/passwd
Cvičení III
Najděte všechny řádky obsahující jména Evans nebo malíř v souboru lidé .
$ egrep 'Evans|Maler' people
Najděte všechny řádky obsahující jména Kovář , Smyth nebo Smythe v souboru lidé .
$ egrep 'Sm(i|y)the?' people
Najděte všechny řádky obsahující jména Hnědý , Prohlížet nebo Zdroj v souboru lidí.
$ egrep 'Brow?e?n' people
Najděte řádek obsahující řetězec (admin), včetně závorek v souboru lidé .
Najděte řádek obsahující znak * v souboru lidí.
$ egrep '*' people
Zkombinujte 5 a 6 výše, abyste našli oba výrazy.