Linux:grep和Egrep詳解

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]" :被匹配的模式須要加上雙引號或單引號

wKioL1MGBMThHo27AADfwf9bqBc861.jpg

2.顯示/proc/meminfo文件中不以大小寫s開頭的行

   -v 是取反的意思

   grep -v --color=auto "^[Ss]" /proc/meminfo

wKioL1MGBv2DU8vuAAEZp5EfcyI926.jpg

3.顯示/proc/meminfo文件中以大小寫s開頭的字符

   -o

   grep -o --color=auto "^[Ss]" /proc/meminfo

wKiom1MGCJGQ_SMFAABtxlmxYhU762.jpg

4.顯示/proc/meminfo文件中以大小寫s開頭的行

   -i

   grep --color=auto -i "^s" /proc/meminfo

wKioL1MGDfSBCYa6AADT9G_UGO4465.jpg

5.顯示/proc/meminfo文件中以大小寫s開頭的行的前一行

   -A#(#爲指定行數)

   -B#(#爲指定行數),指定行數的前#行

   -C#(#爲指定行數),C包含A和B

   grep --color=auto -A1 -i /proc/meminfo

wKioL1MGDzWBNTXPAAD3BSmdzgo567.jpg

6.取出默認shell爲非bash的用戶信息

   grep --color=auto -v "bash\>" /etc/passwd

wKioL1MGEKby__v_AAJB8eSFPN4807.jpg

7.顯示/boot/grub/grub.conf中以致少一個空白字符開頭的行

   grep --color=auto "^[[:space:]]\{1,\}" /boot/grub/grub.conf

   egrep --color=auto "^[[:space:]]{1,}" /boot/grub/grub.conf

wKioL1MGEhjTn3-UAAFnDIP0-Nk659.jpg

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

wKioL1MGEyjTnshVAAH0I4J_EqU352.jpg

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]))"

wKiom1MKBw-jyTFaAACu4enlCn8131.jpg

相關文章
相關標籤/搜索