tunyk avatar

Linux Grep排除過濾輸出實例

🕡 by tunyk

grep 是一種強大的命令行工具,用於在一個或多個輸入檔中搜索與正則表示式匹配的行並將每個匹配的行寫入標準輸出。

在本文中,我們將向您展示如何在使用 。grep

排除單詞和模式

要僅顯示與搜索模式不匹配的行,請使用( 或) 選項。-v``--invert-match

例如,要列印不包含行:nologin

1
2
3
4
grep -wv nologin /etc/passwd
root:x:0:0:root:/root:/bin/bash
git:x:994:994:git daemon user:/:/usr/bin/git-shell
myfreax:x:1000:1000:myfreax:/home/myfreax:/bin/bash

該選項告訴僅返回指定字串是整個單詞(由非單詞字元括起來)的那些行。-w``grep

默認情況下,區分大小寫。 這意味著大寫和小寫被視為不同的字元。 要在搜索時忽略大小寫,請使用該選項進行調用。grep``grep``-i

如果搜索字串包含空格,則需要將其括在單引號或雙引號中。

要指定兩個或多個搜尋模式,請使用以下選項:-e

1
grep -wv -e nologin -e bash /etc/passwd

您可以根據需要多次使用該選項。-e

排除多個搜索模式的另一個選項是使用 OR 運算符 連接模式。|

以下範例列印不包含字串或的行:nologin``bash

1
grep -wv 'nologin\|bash' /etc/passwd

GNU支援三種正則表達式語法,Basic、Extended 和 Perl-compatible。 默認情況下,將模式解釋為基本正則表達式,其中元字元(例如)失去其特殊含義,您必須使用它們的反斜杠版本。grep``grep``|

如果要使用選項擴展正則表示式,則不應轉義運算符,如下所示:-E``|

1
grep -Ewv 'nologin|bash' /etc/passwd

您可以指定不同的可能符合項,這些匹配項可以是文字字串或表示式集。 在以下範例中,字串出現在行首的行被排除在外:games

1
grep -v "^games" file.txt

命令的輸出可以通過管道過濾,只有匹配給定模式的行才會列印在終端上。grep

例如,要列印出系統上所有正在運行的進程,除了以使用者「root」身份運行的進程,您可以過濾ps命令的輸出:

1
ps -ef | grep -wv root

排除目錄和檔

有時,當使用或選項執行遞歸搜索時,您可能希望從搜尋結果中排除特定目錄。-r``-R

1
-r`或選項之間的主要區別在於,當使用大寫字母調用 grep時,它將遵循所有[符號連結](https://www.myfreax.com/how-to-create-symbolic-links-in-linux-using-the-ln-command/)`-R``R

要從搜索中排除目錄,請使用選項。 排除目錄的路徑是相對於搜索目錄的。--exclude-dir

這是一個範例,顯示如何在內的所有檔中搜索字串,不包括目錄:myfreax``/etc``/etc/pki

1
grep -R --exclude-dir=pki myfreax /etc

要排除多個目錄,請將排除的目錄括在大括弧中,並用逗號分隔,不要有空格。

例如,要查找包含字串「GNU」在你的Linux系統排除的檔,和你要運行的目錄:proc``boot``sys

1
grep -r --exclude-dir={proc,boot,sys} gnu /

使用通配符匹配時,您可以排除基本名稱與選項中指定的 GLOB 匹配的檔。--exclude

在下面的範例中,我們在當前工作目錄中的所有檔中搜索字串,不包括以and目錄結尾的檔:myfreax``.png``.jpg

1
grep -rl --exclude=*.{png,jpg} myfreax *

結論

該命令允許您在搜尋檔時排除模式和目錄。grep

💘 相关文章

写一条评论

Based on Golang + fastHTTP + sdb | go1.16.4 Processed in 1ms