1.grep是什麼?git
grep全稱是Global search regular expression and print out the line,全局搜索正則表達式,簡稱grep,它能根據用戶指定的文本模式對目標文件進行逐行搜索,並打印(搜索,刪除,替換)可以被模式匹配的行。常見的有grep,Egrep,Fgrep,而Egrep能夠使用grep -E命令實現,Fgrep能夠使用grep -F來實現。這裏只介紹grep和Egrep,Egrep比起grep相差並不大,Egrep的功能比grep強大一點點,還有一點使用格式上的區別,而能用grep實現的都能用Egrep實現,反之亦然。正則表達式
2.如何使用?shell
grep的使用格式是express
grep [options] PATTERN file...bash
(egrep [options] PATTERN file...)ide
grep的經常使用選項有:spa
-v:取反,顯示不能被模式匹配到的行3d
-o:僅顯示被模式匹配到的字符,而不是顯示整行blog
-i:不區分模式匹配中的大小寫字母ip
-E:就是egrep啦!!!
-A#:(after)顯示被模式匹配到的後#行,如-A2,則取被模式匹配到的當前行的後兩行
-B#:(before),同上
-C#:(after and before),同上
gerp和egrep的區別以下,顏色不一樣的爲他們的區別:
模式說明 | gerp模式標誌 | Egerp模式標誌 |
匹配任意單個字符 | .(英文標點) | .(英文標點) |
匹配中括號裏面的任意單個字符 | []如:[abc],匹配abc中的任意一個 | []如:[abc],匹配abc中的任意一個 |
匹配中括號裏面之外的任意單個字符 | [^]如:[^abc],不匹配abc | [^]如:[^abc],不匹配abc |
匹配其前一個字符任意次 |
*如:x*y,表示x和y之間出現 |
*如:x*y,表示x和y之間出現 |
匹配任意長度的任意字符 | .*如:x.*y,表示x和y中間出現任意改字符 | .*如:x.*y,表示x和y中間出現任意改字符 |
匹配其前面的字符一次或0次 | \?如:x\?y,表示xy或y | ?如:x?y,表示xy或y |
精確匹配前面字符出現的次數 | \{m\}如:a\{5\},匹配5次a | {m}如:a{5},匹配5次a |
最少匹配前面字符出現的次數 | \{m,\}如:a\{5,\},最少匹配5次a |
{m,}如:a{5,},最少匹配5次a |
最多匹配前面字符出現的次數 | \{0,n\}如:a\{0,5},最多匹配5次a | {0,m}如:a{0,5},最多匹配5次a |
分別最少和最多匹配前面字符出現的次數 | \{m,n\}如:a\{3,5\},最少匹配3次a,最多匹配5次a | {n,m}如:{3,5},前面的字符至少出現3次,最少出現5次 |
^錨定行首 | ^root,以root開頭的行 | ^root,以root開頭的行 |
$錨定行尾 | bash$,以bash結尾的行 | bash$,以bash結尾的行 |
錨定詞首 | \<,如:\<a,只能以a開頭的單詞,單詞在這裏的意思是以a開後面跟任意字母或數字,以空格或標點結束的,爲一個單詞,並非英文中所說的單詞 | \<,如:\<a,只能以a開頭的單詞,單詞在這裏的意思是以a開後面跟任意字母或數字,以空格或標點結束的,爲一個單詞,並非英文中所說的單詞 |
錨定詞尾 | \>,如:a\>,以a結尾的單詞 | \>,如:a\>,以a結尾的單詞 |
分組 | \(a,b\)主要用於後向引用 | (ab)主要用於後向引用 |
後向引用 | \number,如:\(ab\)*xy\1,引用第一個括號中的內容 | \number,如:(ab)*xy\1,引用第一個括號中的內容 |
+:匹配前面的字符最少一次 | 不能使用該模式 | 如:a+b,至少匹配a一次 |
|:或者 | 不能使用該模式 | 如:a|b,a或者b |
空白,包括空格鍵和tab建的空白 | [[:space:]] | [[:space:]] |
數字 | [[:digit:]]或者[0-9] | [[:digit:]]或者[0-9] |
3.實際示例:
1.顯示/proc/meminfo文件中以大小寫s開頭的行
命令:grep --color=auto "^[Ss]" /proc/meminfo
注意:--color=auto 是指定顏色的,這樣看比較方便,"^[Ss]" :被匹配的模式須要加上雙引號或單引號
2.顯示/proc/meminfo文件中不以大小寫s開頭的行
-v 是取反的意思
grep -v --color=auto "^[Ss]" /proc/meminfo
3.顯示/proc/meminfo文件中以大小寫s開頭的字符
-o
grep -o --color=auto "^[Ss]" /proc/meminfo
4.顯示/proc/meminfo文件中以大小寫s開頭的行
-i
grep --color=auto -i "^s" /proc/meminfo
5.顯示/proc/meminfo文件中以大小寫s開頭的行的前一行
-A#(#爲指定行數)
-B#(#爲指定行數),指定行數的前#行
-C#(#爲指定行數),C包含A和B
grep --color=auto -A1 -i /proc/meminfo
6.取出默認shell爲非bash的用戶信息
grep --color=auto -v "bash\>" /etc/passwd
7.顯示/boot/grub/grub.conf中以致少一個空白字符開頭的行
grep --color=auto "^[[:space:]]\{1,\}" /boot/grub/grub.conf
egrep --color=auto "^[[:space:]]{1,}" /boot/grub/grub.conf
8.找出/etc/passwd中文件中一位數或兩位數
grep --color=auto "\<[0-9]\{1,2\}" /boot/grub/grub.conf
egrep --color=auto "\<[0-9]{1,2}" /boot/grub/grub.conf
9.寫一個模式,能匹配真正意義上的ip地址
ifconfig | egrep --color=auto"\<(([1-9]\.)|([1-9][0-9]\.)|(1[0-9][0-9]\.)|(2[0-1][0-9]\.)|(22[0-3]\.))(([0-9]\.)|([1-9][1-9]\.)|(1[0-9][0-9]\.)|(2[0-4][0-9]\.)|(25[0-5]\.))(([0-9]\.)|([1-9][1-9]\.)|(1[0-9][0-9]\.)|(2[0-4][0-9]\.)|(25[0-5]\.))(([1-9])|([1-9][1-9])|(1[1-9][1-9])|(2[0-4][0-9])|(25[0-5]))"