標籤:grep
grep 一種強大的文本搜尋工具,它能使用Regex搜尋文本,並把匹配的行列印出來
grep [option] [mode] [file]
-c #只輸出匹配行的數量
-i #搜尋時忽略大小寫
-h #查詢多檔案時不顯示檔案名稱
-l #只列出符合匹配的檔案名稱,而不列出具體的匹配行
-n #列出所有的匹配行,並顯示行號
-s #不顯示不存在或無匹配文本的錯誤資訊
-v #顯示不包含匹配文本的所有行
-w #匹配整詞
-x #匹配整行
-r #遞迴搜尋,不僅搜尋當前工作目錄,而且搜尋子目錄
-q #禁止輸出任何結果,以退出狀態表示搜尋是否成功
-b #列印匹配行距檔案頭部的位移量,以自己為單位
-o #與-b選項結合使用,列印匹配的詞距頭部的位移量,以位元組為單位
-E #支援擴充的Regex
-F #不支援Regex,按照字串的字面意思進行匹配
grep -c root /etc/passwd #文本中有兩個root匹配,即顯示行數為2
grep -i xxx 1 #文本中有XXX和xxx,-i之後會忽略大小寫都輸出出來
grep -h root /etc/passwd /etc/shadow #原本查詢多檔案時,匹配會顯示出檔案名稱及匹配行,加-h之後只會顯示匹配的行,而不會顯示匹配與哪個檔案
grep -l root /etc/passwd /etc/shadow #加-l之後只會顯示匹配的檔案名稱,而不列出具體的匹配行
grep -n root /etc/passwd #-n在輸出匹配結果前面會加匹配的行號
grep -s root /etc/passwd #不顯示錯誤資訊,例如: grep root /etc/passwdwdwd
grep -v root /etc/passwd #列出除了匹配行root以外的所有行
grep -w root /etc/passwd #列出檔案中有單個root的單詞的行
grep -x root /etc/passwd #列出檔案中有單個root為整行的行
grep -r root /tmp #列出/tmp下面的root及子目錄檔案下的root,遞迴查詢出所有的root字元
grep -q root /tmp/root #不輸出任何資訊,以退出方式,成功為0,不成功為其他值
grep -vc root /etc/passwd /etc/shadow #顯示出檔案pass和sha中有多少行是不包含root的行
1、匹配行首
(1)、檢索"/etc/passwd"中以"root"開頭的行,並列印出行號
grep -n ^root /etc/passwd
(2)、檢索"/etc/services"檔案中的空行,列出行號。再次檢索空行有幾行
grep -n ^$ /etc/services
grep -c ^$ /etc/services
(3)、搜尋檔案中以"-"開頭,並且重複任意次,然後是D字元的匹配行
搜尋檔案中以"/"開頭,中間"4"個任一字元,第"6"個字元仍為"/"的匹配行
grep ^-*D filename
grep ^/..../ filename
(4)、搜尋"sed.edu.cn"的匹配行
grep sed\.edu\.cn
(5)、搜尋"-"符號重複5次的文本行
搜尋"the"精確匹配的行
grep ‘\-\{5\}‘ filename #考驗‘‘和\{\}運算式的特性
grep ‘\<the\>‘ filename #考驗‘‘和\<\>運算式的特性
grep #標準grep命令。支援Regex
egrep #擴充grep命令。支援基本和擴充Regex
fgrep #快速grep命令。不支援Regex,按照字串的字面意思進行匹配
egrep 命令與 grep -E等價
fgrep 命令與 grep -F等價
分析下面的Regex表達了什麼含義
(1)、kK* grep kK* test #列出檔案test包含kK及後面有任意多個字元的行
(2)、k\{6,8\} grep ‘k\{6,8\}‘ test #列出檔案test中k單詞重複6-8個的行
(3)、k\{6,\} grep ‘k\{6,\}‘ test #列出檔案test中k單詞大於6個的行
(4)、k\{10\} grep ‘k\{6\}‘ test #列出檔案test中k單詞為6個的行
(5)、^NEW YEAR$
(6)、^$ #空行
(7)、[0-9][0-9][a-z] grep [0-9][0-9][a-z] file #列出檔案中前兩個字元為數字,後一個字元為字母的匹配行
(8)、[A-H]\{1,3\},[0-9]\{5\} #grep ‘[a-h]\{1,3\}‘ test | grep ‘[0-9]\{5\}‘ #列出1-3個a-h單詞,5個數位字元
(9)、^\...
(10)、[^p-z]*\. #列出除了p-z以外的多個任一字元的行
2、利用通配功能列出某目錄下所有以數字開頭,最後3為是句點和2個任意字母的檔案名稱
[0-9]*[a-z]\{2\}...
3、查看下面三條命令
grep -c ^$ filename #列出空行的數目
grep -c ^[^$] filename #列出非空行的數目
grep -c ^^$ filename
4、統計目前的目錄及子目錄下的所有檔案所包含空白行的行數
grep -r ^$ /root/ | wc -l
5、統計目前的目錄及子目錄下的所有檔案包含非空白行的行數
grep -r ^[^$] /root/ | wc -l
6、結合對-符號的闡述,觀察是否對錯
grep -n -\{5,\} file #缺引號,缺轉義符\-
grep -n ‘-\{5,\}‘ file #缺轉義符,系統預設不知道-是選項
grep -n ‘\-\{5,\}‘ file #正確
Shell編程之---grep命令詳解