grep je výkonný nástroj příkazového řádku, který se používá k prohledávání jednoho nebo více vstupních souborů pro řá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 vyloučit jedno nebo více slov, vzorů nebo adresářů při vyhledávání pomocí grep .
Vyloučit slova a vzory #
Chcete-li zobrazit pouze řádky, které neodpovídají vyhledávacímu vzoru, použijte -v (nebo --invert-match ).
Chcete-li například vytisknout řádky, které neobsahují řetězec nologin byste použili:
grep -wv nologin /etc/passwd root:x:0:0:root:/root:/bin/bash
git:x:994:994:git daemon user:/:/usr/bin/git-shell
linuxize:x:1000:1000:linuxize:/home/linuxize:/bin/bash
-w volba říká grep vrátit pouze ty řádky, kde je zadaný řetězec celé slovo (uzavřené neslovnými znaky).
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 velká a malá písmena, vyvolejte grep pomocí -i možnost.
Pokud hledaný řetězec obsahuje mezery, musíte jej uzavřít do jednoduchých nebo dvojitých uvozovek.
Chcete-li zadat dva nebo více vzorů vyhledávání, použijte -e možnost:
grep -wv -e nologin -e bash /etc/passwd
Můžete použít -e možnost tolikrát, kolikrát potřebujete.
Další možností, jak vyloučit více vzorů vyhledávání, je spojit vzory pomocí operátoru OR | .
Následující příklad vytiskne řádky, které neobsahují řetězce nologin nebo bash :
grep -wv 'nologin\|bash' /etc/passwd
GNU grep podporuje tři syntaxe regulárních výrazů, Basic, Extended a Perl-kompatibilní. Ve výchozím nastavení grep interpretuje vzor jako základní regulární výraz, kde jsou metaznaky jako | ztratí svůj zvláštní význam a musíte použít jejich verze se zpětným lomítkem.
Pokud použijete možnost rozšířeného regulárního výrazu -E , pak operátor | by nemělo být escapováno, jak je uvedeno níže:
grep -Ewv 'nologin|bash' /etc/passwd
Můžete zadat různé možné shody, které mohou být doslovné řetězce nebo sady výrazů. V následujícím příkladu jsou řádky, kde je řetězec games vyskytující se na samém začátku řádku jsou vyloučeny:
grep -v "^games" file.txt
Výstup příkazu lze filtrovat pomocí grep potrubím a na terminálu budou vytištěny pouze čáry odpovídající danému vzoru.
Chcete-li například vytisknout všechny běžící procesy ve vašem systému kromě těch, které běží jako uživatel „root“, můžete filtrovat výstup ps příkaz:
ps -ef | grep -wv root Vyloučit adresáře a soubory #
Někdy při provádění rekurzivního vyhledávání pomocí -r nebo -R můžete chtít vyloučit konkrétní adresáře z výsledku vyhledávání.
-r nebo -R možnosti je, že když je grep vyvolán s velkým R bude následovat všechny symbolické odkazy
Chcete-li vyloučit adresář z vyhledávání, použijte --exclude-dir volba. Cesta k vyloučenému adresáři je relativní k vyhledávacímu adresáři.
Zde je příklad ukazující, jak hledat řetězec linuxize ve všech souborech v /etc , kromě /etc/pki adresář:
grep -R --exclude-dir=pki linuxize /etc Chcete-li vyloučit více adresářů, uzavřete vyloučené adresáře do složených závorek a oddělte je čárkami bez mezer.
Chcete-li například ve svém systému Linux najít soubory obsahující řetězec ‚gnu‘ s výjimkou proc , boot a sys adresáře, které byste spustili:
grep -r --exclude-dir={proc,boot,sys} gnu /
Při použití shody zástupných znaků můžete vyloučit soubory, jejichž základní název odpovídá GLOB specifikovanému v --exclude možnost.
V níže uvedeném příkladu hledáme ve všech souborech v aktuálním pracovním adresáři řetězec linuxize , kromě souborů končících na .png a .jpg adresář:
grep -rl --exclude=*.{png,jpg} linuxize * Závěr č.
grep umožňuje vyloučit vzory a adresáře při hledání souborů.