grep

30 Grep příkladů

30 Grep příkladů
Grep najdete hluboko ve zvířecím mozku Unixu a unixových operačních systémů. Jedná se o základní program používaný pro porovnávání vzorů a byl napsán v 70. letech spolu se zbytkem nástroje UNIX, který známe a milujeme (nebo nenávidíme).

Učení o formálních jazycích a regulárních výrazech je vzrušujícím tématem. Učení grepu má v sobě mnohem víc než regulární výrazy. Chcete-li s tím začít a vidět krásu a eleganci grepu, musíte si nejprve prohlédnout příklady ze skutečného světa.

Příklady, které jsou užitečné a trochu vám usnadňují život. Zde je 30 takových grep běžných případů použití a možností.

1. ps aux | grep

V seznamu ps aux jsou uvedeny všechny procesy a související pidy. Ale často je tento seznam příliš dlouhý, aby si ho člověk mohl prohlédnout. Pipetováním výstupu na příkaz grep můžete vypsat procesy spuštěné s velmi specifickou aplikací. Například může být sshd nebo nginx nebo httpd.

# ps aux | grep sshd
kořen 400 0.0 0.2 69944 5624 ?       Ss 17:47 0:00 / usr / sbin / sshd -D
kořen 1076 0.2 0.3 95204 6816 ?       Ss 18:29 0:00 sshd: root @ pts / 0
kořen 1093 0.0 0.0 12784 932 bodů / 0 S + 18:29 0:00 grep sshd

2. Zdravím vaše IP adresy

Ve většině operačních systémů můžete zobrazit seznam všech svých síťových rozhraní a IP, která je tomuto rozhraní přiřazena, pomocí příkazu ifconfig nebo ip addr. Oba tyto příkazy budou vydávat spoustu dalších informací. Pokud ale chcete vytisknout pouze IP adresu (řekněme pro shell skripty), můžete použít následující příkaz:

$ ip addr | grep inet | awk 'tisk 2 $; '
$ ip addr | grep -w inet | awk 'tisk 2 $; '#Pro linky pouze s inet není inet6 (IPv6)

Příkaz ip addr získá všechny podrobnosti (včetně IP adres), poté se přesměruje na druhý příkaz grep inet, který vypíše pouze řádky s inet v nich. To je pak piped do awk print prohlášení, které vytiskne druhé slovo v každém řádku (jednoduše řečeno).

P.S: Můžete to udělat i bez grepu, pokud víte awk dobře víte.

3. Při pohledu na neúspěšné pokusy SSH

Pokud máte internetový server s veřejnou IP adresou, bude neustále bombardován pokusy SSH a pokud uživatelům povolíte přístup SSH založený na heslech (zásada, kterou bych nedoporučoval), můžete všechny tyto neúspěšné pokusy zobrazit pomocí následující příkaz grep:

# cat / var / log / auth.přihlásit | grep „Fail“
Ukázka vyřazena
5. prosince 16:20:03 debian sshd [509]: Selhalo heslo pro root z 192.168.0.100 portů 52374 ssh2
5. prosince 16:20:07 debian sshd [509]: Selhalo heslo pro root z 192.168.0.100 portů 52374 ssh2
5. prosince 16:20:11 debian sshd [509]: Selhalo heslo pro root z 192.168.0.100 portů 52374 ssh2

4. Potrubí Grep do Uniq

Někdy grep vydá spoustu informací. Ve výše uvedeném příkladu se možná jedna IP pokoušela vstoupit do vašeho systému. Ve většině případů existuje jen hrstka takových urážlivých adres IP, které musíte jednoznačně identifikovat a černou listinu.

# cat / var / log / auth.přihlásit | grep "Selhání" | uniq -f 3

Příkaz uniq má tisknout pouze jedinečné řádky. Uniq -f 3 přeskočí první tři pole (aby přehlédl časová razítka, která se nikdy neopakují) a poté začne hledat jedinečné řádky.

5. Zdravím pro chybové zprávy

Používání Grepu pro přístup a protokoly chyb se neomezuje pouze na SSH. Webové servery (jako Nginx) zaznamenávají chyby a přistupují k protokolům velmi pečlivě. Pokud nastavíte monitorovací skripty, které vám pošlou upozornění, když grep „404“ vrátí novou hodnotu. To může být docela užitečné.

# grep -w "404" / var / www / nginx / přístup.log
192.168.0.100 - - [06 / Dec / 2018: 02: 20: 29 +0530] „GET / favicon.ico HTTP / 1.1 "404 200
„http: // 192.168.0.102 / "" Mozilla / 5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit / 537.36 (KHTML, jako Gecko) Chrome / 70.0.3538.110 Safari / 537.36 "
192.168.0.101 - - [06 / Dec / 2018: 02: 45: 16 +0530] „GET / favicon.ico HTTP / 1.1 "404 143
„http: // 192.168.0.102 / "" Mozilla / 5.0 (iPad; CPU OS 12_1 jako Mac OS X)
AppleWebKit / 605.1.15 (KHTML, jako Gecko) Verze / 12.0 Mobile / 15E148 Safari / 604.1 "

Regulární výraz nemusí být „404“, ale některé další filtrování regulárního výrazu pouze pro mobilní klienty nebo pouze zařízení Apple zobrazující webovou stránku. To vám umožní získat lepší přehled o tom, jak si vaše aplikace vede.

6. Výpis balíčků

U systémů založených na Debianu uvádí dpkg -l všechny balíčky nainstalované ve vašem systému. Můžete to přepsat do příkazu grep a vyhledat balíčky patřící konkrétní aplikaci. Například:

# dpkg -l | grep "vim"

7. grep -v fileNames

Chcete-li zobrazit seznam všech řádků, které ne obsahovat daný vzor, ​​použijte příznak -v. Je to v podstatě opak běžného příkazu grep.

8. grep -l

Uvádí seznam všech souborů, které obsahují alespoň jeden výskyt dodaného vzoru. To je užitečné, když hledáte vzor v adresáři s více soubory. Vytiskne pouze název souboru, nikoli konkrétní řádek se vzorem.

9. Možnost jednoho slova -w

$ grep -w fileNames

Příznak -w říká grepu, aby hledal daný vzor jako celé slovo a ne pouze jako podřetězec řádku. Například dříve jsme pozdravili IP adresu a vzor inet vytiskl řádky oběma inet a inet6 seznam adres IPv4 i IPv6. Pokud bychom ale použili příznak -w, pouze řádky s inet jako slovo, před kterým následují prázdné znaky, je platná shoda.

10. Rozšířený regulární výraz

Často zjistíte, že regulární výrazy nativní pro Grep jsou trochu omezující. Ve většině skriptů a pokynů najdete použití příznaku -E, což vám umožní zadat vzor v tzv. Rozšířeném režimu.

Tady jsou příkazy grep a grep -E k hledání slov Superman a Spiderman.

$ grep "\ (Super | Spider \) muž" text
$ grep -E "(Super | Spider) man" text

Jak vidíte, rozšířená verze je mnohem snáze čitelná.

11. Grep pro vaše kontejnery

Pokud máte na hostiteli spuštěnou velkou skupinu kontejnerů, můžete je grepovat podle názvu obrázku, stavu, portů, které vystavují, a mnoha dalších atributů. Například,

$ docker ps | grep [imageName]

12. Grep pro vaše lusky

Zatímco jsme na téma kontejnerů. Kubernetes často mají tendenci spouštět více lusků pod daným nasazením. Zatímco každý pod má jedinečný název, v daném oboru názvů obvykle začínají názvem nasazení. Můžeme to grepovat a vypsat všechny pody spojené s daným nasazením.

$ kubectl získat lusky | grep

13. Grep pro velká data

Analýza tzv. „Velkých dat“ často zahrnuje jednoduché vyhledávání, třídění a počítání vzorů v dané datové sadě. Nízkoúrovňové unixové nástroje jako grep, uniq, wc jsou v tomto obzvlášť dobré. Tento příspěvek na blogu ukazuje pěkný příklad úkolu provedeného za pouhé sekundy pomocí grepu a dalších unixových nástrojů, zatímco Hadoop trvalo téměř půl hodiny.

Například toto soubor dat je více než 1.Velikost 7 GB. Obsahuje informace o velkém množství šachových zápasů, včetně provedených tahů, kdo vyhrál, atd. Zajímají nás pouze výsledky, takže spustíme následující příkaz:

$ grep „Výsledek“ millionbase-2.22.pgn | třídit | uniq -c
221 [výsledek "*"]
653728 [Výsledek "0-1"]
852305 [Výsledek „1-0“]
690934 [Výsledek "1 / 2-1 / 2"]

U 4letého 2jádrového / 4vláknového procesoru to trvalo přibližně 15 sekund. Až tedy příště budete řešit problém „velkých dat“. Přemýšlejte, jestli místo toho můžete použít grep.

14. grep -color = auto

Tato možnost umožňuje grep zvýraznit vzor uvnitř řádku, kde byl nalezen.

15. grep -i

Při porovnávání grepových vzorů se ve své podstatě rozlišují velká a malá písmena. Pokud vám na tom ale nezáleží, pak použití příznaku -i způsobí, že grep nebude citlivý na velikost písmen.

16. grep -n

Příznak -n zobrazí čísla řádků, takže si nemusíte dělat starosti s hledáním stejného řádku později.

17. git grep

Samotný systém pro správu verzí Git má vestavěný příkaz grep, který funguje podobně jako váš běžný grep. Lze jej však použít k hledání vzorů na libovolném potvrzeném stromu pomocí nativního rozhraní git CLI, namísto zdlouhavých kanálů. Například pokud jste v hlavní větvi vašeho repo, můžete grep přes repo použít:

(hlavní) $ git grep

18. grep -o

Příznak -o je opravdu užitečný, když se pokoušíte ladit regex. Vytiskne pouze odpovídající část řádku namísto celého řádku. Takže v případě, že získáte příliš mnoho nežádoucího řádku pro dodaný vzor, ​​a nemůžete pochopit, proč se to děje. Odtud můžete použít příznak -o k vytištění nevhodného podřetězce a důvodu vašeho regulárního výrazu dozadu.

19. grep -x

Příznak -x vytiskne řádek, pokud a pouze v případě, že celý řádek odpovídá vašemu dodanému regulárnímu výrazu. To je poněkud podobné příznaku -w, který vytiskl řádek, pokud se celé slovo shodovalo s dodaným regulárním výrazem.

20. grep -T

Když pracujete s protokoly a výstupy z shell skriptů, je více než pravděpodobné, že narazíte na tvrdé záložky pro rozlišení mezi různými sloupci výstupu. Příznak -T tyto karty úhledně zarovná, takže sloupce jsou úhledně uspořádány, takže je výstup čitelný pro člověka.

21. grep -q

Potlačí výstup a tiše spustí příkaz grep. Velmi užitečné při nahrazování textu nebo spouštění grep ve skriptu démona.

22. grep -P

Lidé, kteří jsou zvyklí na syntaxi regulárního výrazu perl, mohou použít parametr -P k přesnému použití. Nemusíte se učit základní regulární výraz, který grep používá ve výchozím nastavení.

23. grep -D [AKCE]

V systému Unix lze téměř vše považovat za soubor. V důsledku toho lze na grep přivádět jakékoli zařízení, soket nebo datový proud FIFO. Můžete použít příznak -D následovaný AKCÍ (výchozí akce je ČTENÍ). Několik dalších možností je SKIP pro tiché přeskočení konkrétních zařízení a RECURSE pro rekurzivní procházení adresářů a symbolických odkazů.

24. Opakování

Pokud hledáte zadaný vzor, ​​který je opakováním známého jednoduššího vzoru, použijte k označení počtu opakování složené závorky

$ grep -E „[0-9] 10“

Vytisknou se řádky obsahující řetězce dlouhé 10 nebo více číslic.

25. Opakovací zkratky

Některé speciální znaky jsou vyhrazeny pro určitý druh opakování vzoru. Můžete je použít místo složených závorek, pokud vyhovují vašim potřebám.

? : Vzor před otazníkem by se měl shodovat s nulou nebo jednou.

*: Vzor předcházející hvězdy by se měl shodovat nula nebo vícekrát.

+ : Vzor předcházející plus by se měl shodovat jednou nebo vícekrát.

25. Byte Offsets

Pokud chcete vědět vidět posunutí bajtů řádků, kde je nalezen odpovídající výraz, můžete použít i příznak -b k tisku offsetů. Chcete-li vytisknout offset pouze odpovídající části řádku, můžete použít příznak -b s příznakem -o.

$ grep -b -o [název souboru]

Ofset jednoduše znamená, po kolika bajtech od začátku souboru začne odpovídající řetězec.

26. egrep, fgrep a rgerp

Často uvidíte vyvolání egrep, abyste mohli použít syntaxi rozšířeného regulárního výrazu, o které jsme hovořili dříve. Jedná se však o zastaralou syntaxi a je doporučeno, abyste se tomuto nepoužívali. Místo toho použijte grep -E. Podobně použijte grep -F místo fgrep a grep -r místo rgrep.

27. grep -z

Někdy vstupem do grepu nejsou řádky končící znakem nového řádku. Například pokud zpracováváte seznam názvů souborů, mohou pocházet z různých zdrojů. Příznak -z říká grepu, aby považoval znak NULL za konec řádku. To vám umožní zacházet s příchozím streamem jako s jakýmkoli běžným textovým souborem.

28. grep -a [název souboru]

Příznak -a říká grepu, aby zacházel s dodaným souborem, jako by to byl běžný text. Soubor může být binární, ale grep bude zacházet s obsahem uvnitř, jako by šlo o text.

29. grep -U [název souboru]

Příznak -U říká grepu, aby zacházel s dodanými soubory, jako by šlo o binární soubory, nikoli o text. Ve výchozím nastavení grep odhadne typ souboru pohledem na prvních několik bajtů. Použití tohoto příznaku přepíše, že hádání funguje.

30. grep -m NUM

U velkých souborů může grepování výrazu trvat věčně. Pokud však chcete zkontrolovat pouze prvních NUM počtů shod, můžete to provést pomocí parametru -m. Je to rychlejší a výstup je také často zvládnutelný.

Závěr

Mnoho každodenních úkolů sysadmina zahrnuje prosévání velkých řádků textu. Mohou to být protokoly zabezpečení, protokoly z vašeho webového nebo poštovního serveru, aktivita uživatele nebo dokonce velký text manuálových stránek. Grep vám při řešení těchto případů použití poskytuje tu extra flexibilitu.

Doufejme, že vám výše uvedených několik příkladů a případů použití pomohlo lépe porozumět této živé fosilii softwaru.

V systému Windows 10 nefunguje levé tlačítko myši
Pokud používáte speciální myš s notebookem nebo stolním počítačem, ale levé tlačítko myši nefunguje ve Windows 10/8/7 z nějakého důvodu uvádíme několi...
Kurzor při psaní v systému Windows 10 skáče nebo se pohybuje náhodně
Pokud zjistíte, že kurzor myši skáče nebo se pohybuje sám, automaticky, náhodně při psaní v notebooku nebo počítači se systémem Windows, pak vám někte...
Jak obrátit směr posouvání myši a touchpadu ve Windows 10
Myš a Touchpadnejenže usnadňují výpočet, ale jsou efektivnější a méně časově náročné. Nemůžeme si představit život bez těchto zařízení, ale přesto je ...