如何在 Linux 中使用 grep 命令的排除功能
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
-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
排除多個搜索條件的另一個方式是使用運算符 |,以下示例打印不包含字符串nologin和bash的行:
- [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
還可以使用擴展正則表達式,使用選項 -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
下面一個實例,是排除/etc/ssh/sshd_config配置文件中的以#和 空格 開頭的行:
- [root@localhost ~]# cat /etc/ssh/sshd_config |grep -Ev '(^#|^$)'
下面的實例,要打印出系統上所有正在運行的進程,除了以“root”用戶身份運行的進程:
- [root@localhost ~]# ps -ef|grep -wv root
排除目錄或文件
要從grep搜索中排除目錄,請使用--exclude-dir選項。排除目錄的路徑是相對于后面指定的搜索目錄。
下面實例,顯示如何在/etc目錄中的所有文件中搜索單詞keys,不包括 /etc/pki 目錄:
- [root@localhost ~]# grep -Rw --exclude-dir=pki keys /etc/
要排除多個目錄,請將排除的目錄括在大括號中,并使用逗號分隔,不要有空格。
例如,要在系統中查找包含字符串 gnu 的文件,不包括 proc、boot 和 sys 目錄,需要運行下面命令:
- [root@localhost ~]# grep -r --exclude-dir={proc,boot,sys} gnu /
下面實例,使用--exclude選項排除多個文件,我們在當前工作目錄中搜索字符串 linuxprobe,不包括以 .png 和 .jpg 結尾的文件:
- [root@localhost ~]# grep -rl --exclude=*.{png,jpg} linuxprobe *
總結
grep 是一種強大的命令行工具,用于在一個或多個輸入文件中搜索與正則表達式匹配的行,并將匹配的行標準輸出。在本文中介紹如何在使用 grep 搜索時排除一個或多個單詞或目錄。