學linux系統(tǒng),grep這個命令是必須要掌握的。grep命令是用來查找文件或標準輸出中匹配的行,它的強大之處在于它支持正則表達式。日常工作中,grep絕對是用的最多的命令之一。
注:本文只介紹grep的用法,關于正則表達式不做介紹。
下面來看看它的一些常見選項以及含義:
選項
-
-i 搜索時候忽略大小寫
-
-n 列出所有的匹配行,顯示行號
-
-v 反向選擇
-
-c 只輸出匹配行的數量
-
-l 只列出符合匹配的文件名,不列出具體的匹配行
-
-h 查詢多文件時不顯示文件名
-
-r 遞歸搜索
-
-q 禁止輸出任何結果,已退出狀態(tài)表示搜索是否成功
-
–color=auto 將找到的關鍵字加上顏色顯示
-
-E, –extended-regexp PATTERN 是一個可擴展的正則表達式(縮寫為 ERE)
-
-B, –before-context=NUM 打印以文本起始的NUM 行
-
-A, –after-context=NUM 打印以文本結尾的NUM 行
下面來介紹grep的一些用法:
我們知道php.ini有一個時區(qū)的配置,具體的不太清楚,只知道timezone,現在我們想找到該配置信息,就可以使用grep來查找
# 加上-i選項,忽略大小寫 # grep -i timezone /usr/local/php/etc/php.ini ; Defines the default timezone used by the date functions ; http://php.net/date.timezone date.timezone = PRC
grep支持在多個文件中查找
# 這里我們加上-n選項,輸出文件的行號 # grep -in stdio itoa.c quicksort.c itoa.c:2:#include <stdio.h> quicksort.c:1:#include <stdio.h>
反向選擇的-v使用,當我運行了一個程序,想要看看這個程序是否還存在進程中,可以使用下面的方法
# ps aux | grep curl.php root 14374 98.3 1.2 277844 12396 pts/0 R+ 07:54 1:07 php curl.php root 14404 0.0 0.0 112664 984 pts/2 R+ 07:55 0:00 grep --color=auto curl.php
這里就有個問題,我們需要使用-v來過濾掉grep本身的進程
# ps aux | grep curl.php | grep -v grep root 14374 98.5 1.2 277844 12396 pts/0 R+ 07:54 2:36 php curl.php
我們想統(tǒng)計last命令中含root的行數,那么這里就需要用到-c選項了。
# last | grep -c root 353
經常有這種需求,需要批量替換文件中的某文本,那么怎么知道這些文本在哪幾個文件中呢。grep可以做到,配合-l選項
# find . -type f -exec grep -l define {} ; ./find.c ./itoa2.c ./wc.c ./test.c ./wordcnt.c ./longestline.c ./cal.c ./sortline2.c ./sortline.c ./found.c ./atof.c
下面再看一個例子,該例子用到了-E擴展正則,我們想要過濾掉php.ini文件中的注釋行以及空白行
grep -vE '^;|^$' /usr/local/php/etc/php.ini
還有一個常用的選項-r,它可以用來遞歸查找當前目錄下所有文件,以及子目錄文件。下面,我們想查看網站目錄下還有footer的文件有哪些,可以用下面的命令來查找
grep -rn footer ./