Linux grep命令 – 強大的文本搜索工具
grep來自于英文詞組“global search regular expression and print out the line”的縮寫,意思是用于全面搜索的正則表達式,并將結果輸出。人們通常會將grep命令與正則表達式搭配使用,參數作為搜索過程中的補充或對輸出結果的篩選,命令模式十分靈活。
與之容易混淆的是egrep命令和fgrep命令。如果把grep命令當作是標準搜索命令,那么egrep則是擴展搜索命令,等價于“grep -E”命令,支持擴展的正則表達式。而fgrep則是快速搜索命令,等價于“grep -F”命令,不支持正則表達式,直接按照字符串內容進行匹配。
語法格式: grep [參數] 文件
常用參數:
-i 忽略大小寫
-c 只輸出匹配行的數量
-l 只列出符合匹配的文件名,不列出具體的匹配行
-n 列出所有的匹配行,顯示行號
-h 查詢多文件時不顯示文件名
-s 不顯示不存在、沒有匹配文本的錯誤信息
-v 顯示不包含匹配文本的所有行
-w 匹配整詞
-x 匹配整行
-r 遞歸搜索
-q 禁止輸出任何結果,已退出狀態表示搜索是否成功
-b 打印匹配行距文件頭部的偏移量,以字節為單位
-o 與-b結合使用,打印匹配的詞據文件頭部的偏移量,以字節為單位
-F 匹配固定字符串的內容
-E 支持擴展的正則表達式
參考實例
搜索某個文件中,包含某個關鍵詞的內容:
[root@linuxcool ~]# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
搜索某個文件中,以某個關鍵詞開頭的內容:
[root@linuxcool ~]# grep ^root /etc/passwd
root:x:0:0:root:/root:/bin/bash
搜索多個文件中,包含某個關鍵詞的內容:
[root@linuxcool ~]# grep linuxprobe /etc/passwd /etc/shadow
/etc/passwd:linuxprobe:x:1000:1000:linuxprobe:/home/linuxprobe:/bin/bash
/etc/shadow:linuxprobe:$6$9Av/41hCM17T2PrT$hoggWJ3J/j6IqEOSp62elhdOYPLhQ1qDho7hANcm5fQkPCQdib8KCWGdvxbRvDmqyOarKpWGxd8NAmp3j2Ln00::0:99999:7:::
搜索多個文件中,包含某個關鍵詞的內容,不顯示文件名稱:
[root@linuxcool ~]# grep -h linuxprobe /etc/passwd /etc/shadow
linuxprobe:x:1000:1000:linuxprobe:/home/linuxprobe:/bin/bash
linuxprobe:$6$9Av/41hCM17T2PrT$hoggWJ3J/j6IqEOSp62elhdOYPLhQ1qDho7hANcm5fQkPCQdib8KCWGdvxbRvDmqyOarKpWGxd8NAmp3j2Ln00::0:99999:7:::
輸出在某個文件中,包含某個關鍵詞行的數量:
[root@linuxcool ~]# grep -c root /etc/passwd /etc/shadow
/etc/passwd:2
/etc/shadow:1
搜索某個文件中,包含某個關鍵詞位置的行號及內容:
[root@linuxcool ~]# grep -n network anaconda-ks.cfg
17:network --bootproto=static --device=ens160 --ip=192.168.10.10 --netmask=255.255.255.0 --onboot=off --ipv6=auto --activate
18:network --hostname=linuxcool.com
搜索某個文件中,不包含某個關鍵詞的內容:
[root@linuxcool ~]# grep -v 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
linuxprobe:x:1000:1000:linuxprobe:/home/linuxprobe:/bin/bash
搜索當前工作目錄中,包含某個關鍵詞內容的文件,未找到則提示:
[root@linuxcool ~]# grep -l root *
anaconda-ks.cfg
grep: Desktop: Is a directory
grep: Documents: Is a directory
grep: Downloads: Is a directory
initial-setup-ks.cfg
grep: Music: Is a directory
grep: Pictures: Is a directory
grep: Public: Is a directory
grep: Templates: Is a directory
grep: Videos: Is a directory
搜索當前工作目錄中,包含某個關鍵詞內容的文件,未找到不提示:
[root@linuxcool ~]# grep -sl root *
anaconda-ks.cfg
initial-setup-ks.cfg
遞歸搜索,不僅搜索指定目錄,還搜索其內子目錄內是否有關鍵詞文件:
[root@linuxcool ~]# grep -srl root /etc
/etc/fstab
/etc/X11/xinit/Xclients
/etc/X11/xinit/xinitrc
/etc/libreport/events.d/collect_dnf.conf
/etc/libreport/events.d/bugzilla_anaconda_event.conf
/etc/libreport/forbidden_words.conf
………………省略部分輸出信息………………
搜索某個文件中,精準匹配到某個關鍵詞的內容(搜索詞應與整行內容完全一樣才會顯示,有別于一般搜索):
[root@linuxcool ~]# grep -x cd anaconda-ks.cfg
[root@linuxcool ~]# grep -x cdrom anaconda-ks.cfg
cdrom
判斷某個文件中,是否包含某個關鍵詞,通過返回狀態值輸出結果(0為包含,1為不包含),方便在Shell腳本中判斷和調用:
[root@linuxcool ~]# grep -q linuxprobe anaconda-ks.cfg
[root@linuxcool ~]# echo $?
[root@linuxcool ~]# grep -q linuxcool anaconda-ks.cfg
[root@linuxcool ~]# echo $?
搜索某個文件中,空行的數量:
[root@linuxcool ~]# grep -c ^$ anaconda-ks.cfg
- linux mv命令 – 移動或改名文件
- ls是最常被使用到的Linux命令之一,來自于英文單詞list的縮寫,也正如list單詞的英文意思,其功能是列舉出指定目錄下的文件名稱及其屬
- 03-12 關注:4