介紹
grep是一個功能強大的文字搜尋命令,可以用它來搜尋某個檔案中是否包含指定的搜尋內容,它可以利用正規表示式來做複雜的篩選操作,它還可以為其它命令傳輸給管道的篩選,比如我們常用到的分析單個程式的操作就是會利用它“ps -ef|grep command”。
語法
grep [OPTION]... PATTERN [FILE]...
預設不加引數是顯示匹配上的行記錄,可以使用--help來檢視它所支援的所以引數,本文只會列舉比較常用的一些命令。
-a:輸出的內容不要忽略二進位制資料
-b<n>:輸出匹配上的n個位元組的行。
-c :只顯示符合條件的行的數量,不顯示內容
-d:當你要查詢的是目錄而不是檔案的時候需要制定該引數,否則會報錯
-H:在輸出的內容行前加上該行所屬的檔名。
-h:不在輸出的行前加上該行所屬的檔名,這是預設的選項。
-i:忽略大小寫
-L:列出不符合查詢內容的檔案的檔名
-l:列出符合查詢內容的檔案的檔名
-m<n>:只輸出匹配上的指定n行。
-o:只顯示查詢的內容,不顯示該行其它的內容。
-q:什麼都不輸出
-r:如果需要遍歷整個目錄的所有檔案,可以使用該引數
-v:顯示沒有匹配上的行資訊,和預設值相反
-V:顯示版本資訊
正規表示式
grep配合正則進行篩選的時候對於{ } ()都需要用到轉義字元。
命令 |
說明 |
^ |
在字元的開啟處進行匹配 |
$ |
在字元的末尾處進行匹配 |
. |
匹配任何字元(包括回車和新行) |
[….] |
匹配括號內的任意單個字元 |
[m-n] |
匹配m到n之間的任意單個字元,例如[0-9],[a-z],[A-Z] |
[^..] |
不能匹配括號內的任意單個字元 |
a* |
匹配0個或多個a,包括空 |
a\{m\} |
匹配m個a |
a\{m,\} |
匹配m個或者更多個a |
a\{m,n\} |
匹配m到n個a |
\(….\) |
將模式元素組成單一元素,例如(do)*意思是匹配0個多或多個do
|
grep常見用法
建立測試資料
grep --help >/tmp/grep.text
1.為其它命令做篩選操作
查詢包含sbin的程式
[root@localhost ~]# ps -ef |grep "sbin"
root 1 0 0 11:04 ? 00:00:01 /sbin/init
root 543 1 0 11:04 ? 00:00:00 /sbin/udevd -d
root 1559 1 0 11:04 ? 00:00:00 /usr/sbin/vmware-vmblock-fuse -o subtype=vmware-vmblock,default_permissions,allow_other /var/run/vmblock-fuse
root 1580 1 0 11:04 ? 00:00:18 /usr/sbin/vmtoolsd
root 1992 1 0 11:04 ? 00:00:00 /sbin/rsyslogd -i /var/run/syslogd.pid -c 5
root 2078 1 0 11:04 ? 00:00:00 /usr/sbin/modem-manager
root 2122 1 0 11:04 ? 00:00:00 /usr/sbin/wpa_supplicant -c /etc/wpa_supplicant/wpa_supplicant.conf -B -u -f /var/log/wpa_supplicant.log -P /var/run/wpa_supplicant.pid
root 2133 1 0 11:05 ? 00:00:00 /usr/sbin/acpid
root 2219 1 0 11:05 ? 00:00:00 /usr/sbin/bluetoothd --udev
root 2298 1 0 11:05 ? 00:00:00 /usr/sbin/sshd
root 3172 1 0 11:05 ? 00:00:00 /usr/sbin/abrtd
root 3199 1 0 11:05 ? 00:00:00 /usr/sbin/atd
root 3215 1 0 11:05 ? 00:00:00 /usr/sbin/gdm-binary -nodaemon
root 3220 1 0 11:05 tty2 00:00:00 /sbin/mingetty /dev/tty2
root 3222 1 0 11:05 tty3 00:00:00 /sbin/mingetty /dev/tty3
root 3224 1 0 11:05 tty4 00:00:00 /sbin/mingetty /dev/tty4
root 3227 543 0 11:05 ? 00:00:00 /sbin/udevd -d
root 3228 1 0 11:05 tty5 00:00:00 /sbin/mingetty /dev/tty5
root 3230 1 0 11:05 tty6 00:00:00 /sbin/mingetty /dev/tty6
root 3231 543 0 11:05 ? 00:00:00 /sbin/udevd -d
root 3261 1 0 11:05 ? 00:00:00 /usr/sbin/console-kit-daemon --no-daemon
root 5923 2071 0 14:12 ? 00:00:00 /sbin/dhclient -d -4 -sf /usr/libexec/nm-dhcp-client.action -pf /var/run/dhclient-eth0.pid -lf /var/lib/dhclient/dhclient-3a7ff4d9-5a09-46b1-bb20-0298a18e6b78-eth0.lease -cf /var/run/nm-dhclient-eth0.conf eth0
root 6294 6044 0 15:50 pts/1 00:00:00 grep sbin
2. 查詢行數
查詢包含“-d”的行數 [root@localhost ~]# grep -c "\-d" /tmp/grep.txt 6
3.$
查詢以lines結尾的行
[root@localhost ~]# grep "lines$" /tmp/grep.txt -x, --line-regexp force PATTERN to match only whole lines -v, --invert-match select non-matching lines -b, --byte-offset print the byte offset with output lines -n, --line-number print line number with output lines
4.{m,}
查詢包含2個或者更多個S的行 [root@localhost ~]# grep "\(s\)\{2,\}" /tmp/grep.txt PATTERN is, by default, a basic regular expression (BRE). -E, --extended-regexp PATTERN is an extended regular expression (ERE) -G, --basic-regexp PATTERN is a basic regular expression (BRE) -P, --perl-regexp PATTERN is a Perl regular expression -s, --no-messages suppress error messages -h, --no-filename suppress the file name prefix on output -q, --quiet, --silent suppress all normal output --binary-files=TYPE assume that binary files are TYPE; -r is given, - otherwise. If fewer than two FILEs are given, assume -h.
總結
注意使用轉義字元,如果使用正則要查詢的不是單個字元而是多個字元需要使用()把多個字元括起來,grep還有很多的使用技巧這裡就不一一列出來。
備註: 作者:pursuer.chen 部落格:http://www.cnblogs.com/chenmh 本站點所有隨筆都是原創,歡迎大家轉載;但轉載時必須註明文章來源,且在文章開頭明顯處給明連結。 《歡迎交流討論》 |