GNU/Linux >> Znalost Linux >  >> Linux

Jak Grep pro více řetězců a vzorů

grep je výkonný nástroj příkazového řádku, který vám umožňuje vyhledávat v jednom nebo více vstupních souborech řádky, které odpovídají regulárnímu výrazu, a zapisuje každý odpovídající řádek na standardní výstup.

V tomto článku vám ukážeme, jak používat GNU grep pro hledání více řetězců nebo vzorů.

Více vzorů Grep #

GNU grep podporuje tři syntaxe regulárních výrazů, Basic, Extended a Perl-kompatibilní. Pokud není zadán žádný typ regulárního výrazu, grep interpretovat vyhledávací vzory jako základní regulární výrazy.

Chcete-li vyhledat více vzorů, použijte operátor OR (alternace).

Alternativní operátor | (pipe) umožňuje zadat různé možné shody, které mohou být doslovné řetězce nebo sady výrazů. Tento operátor má nejnižší prioritu ze všech operátorů regulárních výrazů.

Syntaxe pro vyhledávání více vzorů pomocí grep základní regulární výrazy jsou následující:

grep 'pattern1\|pattern2' file...

Regulární výraz vždy uzavřete do jednoduchých uvozovek, abyste zabránili interpretaci a rozšíření metaznaků pomocí shellu.

Při použití základních regulárních výrazů jsou metaznaky interpretovány jako doslovné znaky. Chcete-li zachovat zvláštní význam metaznaků, musí být escapovány zpětným lomítkem (\ ). To je důvod, proč se vyhýbáme operátoru OR (| ) s lomítkem.

Chcete-li vzor interpretovat jako rozšířený regulární výraz, vyvolejte grep -E (nebo --extended-regexp ) možnost. Při použití rozšířeného regulárního výrazu neuvádějte znak | operátor:

grep -E 'pattern1|pattern2' file...

Další informace o tom, jak vytvářet regulární výrazy, naleznete v našem článku Grep regex.

Grep Multiple Strings #

Doslovné řetězce jsou nejzákladnější vzory.

V následujícím příkladu hledáme všechny výskyty slov fatal , error a critical v souboru logerror Nginx:

grep 'fatal\|error\|critical' /var/log/nginx/error.log

Pokud hledaný řetězec obsahuje mezery, uzavřete jej do dvojitých uvozovek.

Zde je stejný příklad s použitím rozšířeného regulárního výrazu, který eliminuje potřebu escapování operátoru |

grep -E 'fatal|error|critical' /var/log/nginx/error.log

Ve výchozím nastavení grep rozlišuje velká a malá písmena. To znamená, že velká a malá písmena jsou považována za odlišná.

Chcete-li při vyhledávání ignorovat malá a velká písmena, vyvolejte grep with -i možnost (nebo --ignore-case ):

grep -i 'fatal\|error\|critical' /var/log/nginx/error.log

Při hledání řetězce grep zobrazí všechny řádky, kde je řetězec vložen do větších řetězců. Pokud jste tedy hledali „error“, grep vytiskne také řádky, kde je výraz „chyba“ vložen do větších slov, jako je „bez chyby“ nebo „antiteroristé“.

Chcete-li vrátit pouze ty řádky, kde je zadaný řetězec celé slovo (uzavřené neslovnými znaky), použijte -w (nebo --word-regexp ) možnost:

grep -w 'fatal\|error\|critical' /var/log/nginx/error.log

Mezi znaky slov patří alfanumerické znaky (a-z, A-Z a 0-9) a podtržítka (_). Všechny ostatní znaky jsou považovány za neslovní znaky.

Další podrobnosti o grep možnosti, navštivte náš článek Příkaz Grep.

Závěr č.

Ukázali jsme vám, jak grep pro hledání více vzorů, řetězců a slov.

Pokud máte nějaké dotazy nebo zpětnou vazbu, neváhejte zanechat komentář.


Linux
  1. Jak určíme více vzorů ignorování pro příkaz `strom`?

  2. Grep pro více řetězců v souborech a pak seznam souborů v pořadí velikosti?

  3. Jak zadat heslo pro více Windows?

  1. Linux – Jak šáhnout po konkrétním slovu a uchopit text?

  2. Jak najít více řetězců v souborech?

  3. Jak zkombinovat hledání a grep pro komplexní hledání? ( GNU/linux, find, grep )

  1. Jak používám Ansible a anacron pro automatizaci

  2. Jak porovnávat čísla a řetězce ve skriptu Linux Shell

  3. Jak grep pro unicode � ve skriptu bash