如何使用grep命令的排除功能

大雄45發表於2021-06-29
導讀 grep 是一種強大的 行工具,用於在一個或多個輸入檔案中搜尋與正規表示式匹配的行,並將匹配的行標準輸出。在本文中介紹如何在使用 grep 搜尋時排除一個或多個單詞或目錄。
排除單詞或多個條件

要僅顯示與搜尋模式不匹配的行,請使用 -v選項。例如,顯示不包含 nologin的行,使用下面 :

[root@localhost ~]# grep -wv nologin /etc/passwd
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
bob:x:1000:1000::/home/bob:/bin/bash
user01:x:1001:1001::/home/user01:/bin/bash
postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash

如何使用grep命令的排除功能如何使用grep命令的排除功能
-w選項告訴 grep 僅返回-w選項後面包含單詞的行。

預設情況下grep 區分大小寫。這意味著大寫和小寫字元被視為不同的。若要在搜尋時忽略大小寫,請使用 -i 選項呼叫 grep。

如果搜尋字串中包含空格,則需要將內容放在單引號或者雙引號內。

若要排除兩個或多個搜尋條件,請使用 -e選項,可根據需要多次使用 -e選項:

[root@localhost ~]# grep -wv -e nologin -e bash /etc/passwd
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt

如何使用grep命令的排除功能如何使用grep命令的排除功能
排除多個搜尋條件的另一個方式是使用運算子  |,以下示例列印不包含字串 nologinbash的行:

[root@localhost ~]# grep -wv 'nologin\|bash' /etc/passwd
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt

如何使用grep命令的排除功能如何使用grep命令的排除功能
還可以使用擴充套件正規表示式,使用選項  -E會後,運算子 |就不需要被轉義了,如下圖:

[root@localhost ~]# grep -Ewv 'nologin|bash' /etc/passwd
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt

如何使用grep命令的排除功能如何使用grep命令的排除功能
下面一個例項,是排除 /etc/ssh/sshd_config配置檔案中的以 #和 空格 開頭的行:

[root@localhost ~]# cat /etc/ssh/sshd_config |grep -Ev '(^#|^$)'

如何使用grep命令的排除功能如何使用grep命令的排除功能
下面的例項,要列印出系統上所有正在執行的程式,除了以“root”使用者身份執行的程式:

[root@localhost ~]# ps -ef|grep -wv root

如何使用grep命令的排除功能如何使用grep命令的排除功能

排除目錄或檔案

要從grep搜尋中排除目錄,請使用 --exclude-dir選項。排除目錄的路徑是相對於後面指定的搜尋目錄。

下面例項,顯示如何在/etc目錄中的所有檔案中搜尋單詞 keys,不包括 /etc/pki 目錄:

[root@localhost ~]# grep -Rw --exclude-dir=pki keys /etc/

如何使用grep命令的排除功能如何使用grep命令的排除功能
要排除多個目錄,請將排除的目錄括在大括號中,並使用逗號分隔,不要有空格。

例如,要在系統中查詢包含字串  gnu 的檔案,不包括 proc、boot 和 sys 目錄,需要執行下面命令:

[root@localhost ~]# grep -r --exclude-dir={proc,boot,sys} gnu /

下面例項,使用 --exclude選項排除多個檔案,我們在當前工作目錄中搜尋字串  probe,不包括以 .png 和 .jpg 結尾的檔案:

[root@localhost ~]# grep -rl --exclude=*.{png,jpg} linuxprobe *
總結

grep 是一種強大的命令列工具,用於在一個或多個輸入檔案中搜尋與正規表示式匹配的行,並將匹配的行標準輸出。在本文中介紹如何在使用 grep 搜尋時排除一個或多個單詞或目錄。

本文原創地址:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2778949/,如需轉載,請註明出處,否則將追究法律責任。

相關文章