1、grep簡介以及命令參數選項linux
2、正則表達式簡介及元字符、字符集合git
3、grep及正則表達式實例正則表達式
-------------------------------------------------------------------------------------------------------------------shell
grep 簡介express
grep : global search regular expression(RE) and print out the line,全面搜索正則表達式並把行打印出來)是一種強大的文本搜索工具,它能使用正則表達式搜索文本,並把匹配的行打印出來。Unix的grep家族包括grep、egrep和fgrep。egrep和fgrep的命令只跟grep有很小不一樣。egrep是grep的擴展,支持更多的re元字符, fgrep就是fixed grep或fast grep,它們把全部的字母都看做單詞,也就是說,正則表達式中的元字符表示回其自身的字面意義,再也不特殊。linux使用GNU版本的grep。它功能更強,能夠經過-G、-E、-F命令行選項來使用egrep和fgrep的功能。
grep的工做方式是這樣的,它在一個或多個文件中搜索字符串模板。若是模板包括空格,則必須被引用,模板後的全部字符串被看做文件名。搜索的結果被送到屏幕,不影響原文件內容。
grep可用於shell腳本,由於grep經過返回一個狀態值來講明搜索的狀態,若是模板搜索成功,則返回0,若是搜索不成功,則返回1,若是搜索的文件不存在,則返回2。咱們利用這些返回值就可進行一些自動化的文本處理工做。
grep 命令:
格式:
grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
【選項與參數】(這裏只介紹比較經常使用的選項,想了解更多請使用man grep查看)
--color=auto:高亮顯示匹配到的字符串;
-v --invert-match:反向選取,只顯示不符號模式的行
;
-o --only-matching:只顯示被模式匹配到的字串,而不是整個行;
-i --ignore-case:不區分字符大小寫
;
-l --files-with-matches:只列出匹配的文件名;
-L --files-without-matches:只列出不匹配的文件名;
-w --word-regexp:匹配完整字符串(單詞),而不是匹配部分字符串;
-A NUM:顯示匹配到的行,並顯示其後面的NUM行
;
-B NUM:
顯示匹配到的行,並顯示其前面的NUM行
;
-C NUM:
顯示匹配到的行,並顯示其前、後面的NUM行
;
-E --extended-regexp:支持擴展正則表達式
;
正則表達式簡介
任何一個有經驗的系統管理員,都會告訴你:正則表達式真是挺重要的!爲何很重要呢?由於平常生活就使用獲得。舉個例子
來講,在你平常使用vim作文字處理或編寫程序時使用到的查找、替換等功能,這些舉動要作得漂亮,就得要配合正則表達式來處理!
簡單的說,正則表達式就是處理字符串的方法,它是以行爲單位來進行字符串的處理行爲,正則表達式通常經過一些特殊符號的輔助,可讓用戶輕易達到查找、刪除、替換某特定字符串的處理程序。
正則表達式包括:基本正則表達式,擴展正則表達式;
基本正則表達式:貪婪模式(儘量長地去匹配符合模式的內容)
元字符:
^:錨定行首的符合條件的內容,用法格式「^pattern」;
$:錨定行尾的符合條件的內容,用法格式「pattern$」;
.
:匹配任意單個字符
;
*
:匹配緊挨在其前面的字符任意次
;
.*
:匹配任意長度的任意字符
;
[]
:
匹配包含內的任一字單個字符
;
[^]
:
匹配包含外的任一字單個字符
;
\
:
將下一字符標記爲特殊字符、文本、反向引用或八進制轉義符
;
\?
:匹配緊挨在其前面的字符0次或1次;
\<
:錨定詞首
\>
:錨定詞尾
x\{m\}
:匹配其前面的字符「x」m次(精確匹配);
x\{m,\}
:
匹配其前面的字符「x」至少m次;
x\{m,n\}
:匹配其前面的字符「x」至少m次,至多n次;
\(\)
:分組
;
字符集合:
[:lower:]:表明小寫字母,即 a-z
[:upper:]:表明大寫字母,即 A-Z
[:digit:]:表明數字,即 0-9
[:alpha:]:表明任何英文大小寫字母,即
a-z A-Z
[:alnum:]:表明英文大小字符及數字,即 0-9 a-z A-Z
[:space:]:表明空格鍵與Tab按
鍵
[:punct:]:表明標點符號,即 「 , ;? ! : # $
grep及正則表達式實例:vim
經過以上對grep命令、正則表達式、元字符、字符集合的簡單介紹,下面咱們來舉些例子,讓你們更好的瞭解grep命令及正則表達式的基本使用,並更好的瞭解命令的參數 、選項,正則表達式的元字符及字符集合的意義:
例一:在/etc/passwd文件中查找匹配root的串,並以高亮顯示其匹配的字符串。
[root@lgh01 ~]# grep --color=auto "root" /etc/passwd
--color=auto 可將正確匹配的字符串以高亮紅色顯示。 bash
例二:在/etc/passwd文件中查找以root開頭的行,並將其顯示。ide
[root@lgh01 ~]# grep --color=auto "^root" /etc/passwd
經過行首錨定符進行匹配,能夠看出這次匹配的內容僅是以root開頭的行。在其它位置出現不匹配。工具
例三:
在/etc/passwd文件中查找以/bin/bash結尾的行,並將其顯示。
[root@lgh01 ~]# grep --color=auto "/bin/bash$" /etc/passwd
經過行尾錨定符進行匹配,能夠看出這次匹配的內容僅是以/bin/bash結尾的行。ui
例四:
在/etc/passwd文件中查找匹配ftp的行。
[root@lgh01 ~]# grep --color=auto ftp /etc/passwd
你們注意到沒有,此行還包含一個大寫「FTP」字符串,這裏沒有匹配出來,從這個例子中能夠看出,grep命令進行字符匹配是區分大小寫字母的。
例五:在/etc/passwd文件中查找匹配ftp的行。不區分大小寫。
[root@lgh01 ~]# grep --color=auto -i ftp /etc/passwd
你們看看和上一個命令的區別,就很容易發現,經過-i參數,不區分大小寫進行匹配,因此大、小寫的ftp都匹配出來了。
例六:
在/etc/passwd文件中查找匹配bin的字符串,要徹底匹配,不能匹配相似sbin的字串。
[root@lgh01 ~]# grep --color=auto "\<bin\>" /etc/passwd
經過詞首"\<"、詞尾"\>"錨定符進行字符串徹底匹配。若是不使用詞首詞尾錨定符,會將相似/sbin字串一塊兒匹配出來。
例七:
在/etc/passwd文件中查找匹配兩個ftp之間包含任意字符的行。
[root@lgh01 ~]# grep --color=auto "\(ftp\).*\1" /etc/passwd
ftp字符串以分組方式進行匹配,你們注意到命令中的\1,表示引用第一個分組的內容,若是字符串中有多個分組,能夠用\2 \3進行引用第二分組及第三分組中的字符串。
例八:
在/etc/passwd文件中查找匹配o,而且至少出現2次的字符串的行。
[root@lgh01 ~]# grep --color=auto 'o\{2,\}' /etc/passwd
\{2,\} 匹配前面字符至少2次,表示o字符最少必須連續出現兩次或三次或更屢次,例:rooot 、spoooot、toooools等。
例九:顯示/etc/rc.d/rc.sysinit中以#開頭,且後面跟一個或多個空白字符,然後又跟了任意非空白字符的行。
[root@lgh01 ~]# grep '^#[[:space:]]\{1,\}[^[:space:]]*' /etc/rc.d/rc.sysinit
例十:
顯示/etc/rc.d/rc.sysinit文件中的內容,並不顯示以#號開頭的行和空白行。
[root@lgh01 ~]# grep -v '^#' /etc/rc.d/rc.sysinit | grep -v '^$'
例十一:顯示IPV4的地址信息的行,排除lo迴環地址。
[root@lgh01 ~]# ip add list | egrep "[[:space:]]+inet[^6].*[^lo]$" 或
[root@lgh01 ~]# ifconfig | egrep "[[:space:]]+inet[^6].*" | grep -v 127.0.0.1
例十二:找出ifconfig不包含迴環地址的其它IP地址,不包括IP廣播地址和子網掩碼等信息。
[root@lgh01 ~]# ifconfig |egrep --color "\<([1-9]|[1-9][0-9]|1[0-1]+[0-9]+|12[^7]+|1[3-9]+[0-9]|2[01][0-9]|22[0-3])\>(\.\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\>){2}\.\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\>"
這個看起來真是有些頭痛 ,不過多看幾遍就行了,咱們分解一下在看看是否是就容易不少了。
"\
<([1-9]| :1-9
[1-9][0-9]| :10-99
1[0-1]+[0-9]+| :100-199
12[^7]+| :120-129 排除127
1[3-9]+[0-9]| :130-139
2[01][0-9]| :200-219
22[0-3])
\>
:220-223
(\.\<([0-9]| :0-9
[1-9][0-9]| :10-99
1[0-9][0-9]| :100-199
2[0-4][0-9]| :200-249
25[0-4]
)\>)
:250-254
{2} 精確匹配前面分組2次
\.\<([1-9]| :1-9
[1-9][0-9]| :10-99
1[0-9][0-9]| :100-199
2[0-4][0-9]| :200-249
25[0-4]
)\>"
:250-254
Linux grep 命令功能、正則表達式先簡單介紹到這裏了,但願對你們有所幫忙,本篇博文後續還會繼續更新,後續更新主要以實例爲主。但願你們關注啊!