菜鳥的Linux之路1->egrep及其正則表示式
正則表示式(REGEXP:Regular Expression)
正則表示式分為兩類:
1,基本的正則表示式。Basic REGEXP
2,擴充套件的正則表示式。Extened REGEXP
基本的正則表示式:
字元匹配
. 匹配任意單個字元
[]:匹配指定範圍內的任意單個字元
[^]:匹配指定範圍外的任意單個字元
次數匹配
* 表示其前的字元匹配任意次
\? 表示其前的字元匹配0或者1次
\{m,n\} 表示匹配次數至少m次,至多n次,n可以省略表示沒有匹配次數的上限
.* 表示匹配任意長度的任意字元
錨定:錨定的是單個單詞
^ 錨定行首
$ 錨定行尾
\<,\b 錨定單詞首部
\>,\b 錨定單詞尾部
\(\) 用作後向引用->\1,\2,\3,...
grep命令:使用基本正則表示式定義的模式來過濾文字的命令
格式:grep [option] Pattern file...
常用option:
-i:忽略匹配到的字元的大小寫
-v:反向過濾
-o:只顯示匹配到的字串,而不是整行都顯示
--color:顯示匹配到的文字的顏色
-E:使用擴充套件的正則表示式
-A(After) #:當某一行被grep命令匹配到之後,不但顯示這一行的內容,這一行之後的#行也會被顯示出來
-B(Before) #:當某一行被grep命令匹配到之後,不但顯示這一行的內容,這一行之前的#行也會被顯示出來
-C(Context:上下文) #:當某一行被grep命令匹配到之後,不但是顯示出這一行的內容,這一行之前和之後的#行都會被顯示出來
預設情況下,正則表示式工作在貪婪模式下
擴充套件的正則表示式
字元匹配
. 匹配任意單個字元
[] 匹配指定範圍內的任意單個字元
[^] 匹配指定範圍外的任意單個字元
次數匹配
* 匹配其前的字元任意次
? 匹配其前的字元0次或者1次
+ 匹配其前的字元至少一次 = \{1,\}
舉例:grep --color -E '[[:space:]]+' ... 表示過濾出文字中,至少以一個空白字元開頭的行
{m,n} 表示匹配次數至少m次,至多n次,擴充套件正則表示式的花括號不需要加反斜線
位置錨定
^ 錨定行首
$ 錨定行尾
\< 錨定單詞首部
>\ 錨定單詞尾部
分組
():分組->\1,\2,\3,...
或者|是擴充套件正則表示式中的特殊字元
|:or
舉例:
C|cat表示的是C或cat
如果想要實現Cat或cat的效果的話,得使用分組
'(C|c)at'即可實現
egrep = grep -E 擴充套件的正則表示式
舉例:取出檔案中1-255的整數
egrep --color '\b([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b' ...
\. \是轉譯符,轉譯符的作用是讓元字元表示它本身的意義,而不是元字元的意義,它就表示一個點
egrep --color '(\b([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b){#}...'
表示的是將前面()中的內容重複執行{}中的#次
IP地址:
ipv4->
有五類地址,分別為A類,B類,C類,D類,E類,對我們有用的只有ABC三類,剩餘兩類是用來做研究使用的
A類:IP的第一段從1-127
B類:IP的第一段從127-191
C類:IP的第一段從192-223
grep命令有三個,除了grep、egrep之外還有一個fgrep命令
grep預設情況下只支援基本正則表示式的命令
egrep是支援擴充套件正則表示式的命令
fgrep = fast grep 快速grep
grep做模式匹配去搜索文字的時候會浪費大量的CPU時鐘週期,而當你使用fgrep的時候,模式中的任何字元都會被當做字元本身去匹配,fgrep不支援正則表示式,所以它不去搜索正則表示式,所以速度很快