正則表達式一般被用來檢索,替換那些符合某個模式的內容,一般是使用一類字符所書寫的模式,而這些模式一般是元字符和普通字符的混合體git
咱們一般使用選取條件,只顯示符合條件的工具備GREP, EGREP,FGREP正則表達式
1,GREP 全稱是:Globle searchRegular RE) and Print out the line ,< /span>全面搜索正則表達式並把它打印出來,支持基本的正則表達式bash
2,EGREPExtended GREP, 擴展的GREP,支持擴展的正則表達式ide
3,FGREP,fast GREP,不支持正則表達式工具
三者中 FGREP是最快速的,效率最高,可是不支持模式(pattern)匹配,因此咱們通常不使用,最經常使用的是GREP和EGREPspa
咱們來解釋GREP已經EGREP的內容,可以使你們明白GREP和EGREP的用法ci
咱們來看GREP的語法格式字符串
GREP[option] ‘pattern’FILEit
GREP[選項]‘模式’文件io
咱們首先看pattern(模式),而後再看option
Pattern是由元字符和普通字符組成
經常使用的pattern解釋以下
符號 |
做用 |
用法格式 |
|
^脫字符 |
錨定行首 |
^patten |
|
$ |
錨定行尾 |
Pattern$ |
|
. |
匹配任意字符 |
| |
* |
匹配緊挨再前面的任意字符 |
| |
[] |
匹配指定範圍內的任意字符 |
| |
[^] |
匹配非指定範圍的任意字符 |
| |
\? |
匹配其前面的字符1次或者0次 |
| |
\{m,n\} |
匹配前面的字符至少m次,至多n次 |
| |
\< |
錨定詞首 |
\<pattern |
|
\> |
錨定詞尾 |
Patteren\> |
|
\(\) |
分組 |
\(pattern\) |
|
| | | |
拓展選項
.* |
匹配任意長度字符 |
|
[a-z] [:lower:] |
小寫字母 |
|
[A-Z][:upper:] |
大寫字母 |
|
[0-9][:digit:] |
數字 |
|
[:alpha:] |
字母 |
|
[:almum:] |
字母或者數字 |
|
[:space:] |
空格 |
|
[:punct:] |
| |
\{m,\}+m(加強版的) |
最少匹配m次,最多無限次 |
|
\{0,m\} |
不大於m次 |
|
\{m\} |
精確匹配m次 |
|
\(pattern\) .*\1 |
以pattern所匹配的字符爲一個組 |
|
加強的正則表達式:
+ |
匹配前面的數字至少N次 |
|
| |
選擇 |
|
咱們來看grep的選項
--color 顏色
-v反向選取,
-o只顯示被匹配到的字符串,而不是整個行
-i 不區分大小寫
-A # 顯示匹配的行時,順帶顯示後面的#個行
-B # 顯示匹配的行時,順帶顯示前面的#個行
-C # 顯示匹配的行時,順帶顯示先後的#個行
-E使用加強的正則表達式
咱們來舉例:
eg1 :查看/etc/passwd下一root 開頭,以sh結尾的
# grep "^r.*sh$" /etc/passwd
root:x:0:0:root:/root:/bin/bash
咱們來查看/etc/passwd下的內容,咱們使用#/etc/passwd來查看,咱們看部分截圖
解釋:尋找以r開頭,因此使用脫字符^, ^r表示, . 表示任意字符,*表示匹配所在其前的任意字符,
因此.* 就表示匹配任意字符若干次,$ 表示錨定行尾,因此sh$就表示以sh結尾的行
綜合上面描述# grep"^r.*sh$" /etc/passwd 就表示匹配以r開頭,sh結尾的行
eg2:顯示./etc/http.d/conf/httpd.conf中非空白字符行
# grep –v 「^$」/etc/http.d/conf/httpd.conf
咱們看到 ^$表示空白行,^表示行首,$表示行尾,因此^$ 表示整個行
eg3,顯示ifconfig中匹配1-255之間的數字
ifconfig | grep--color=auto -E"\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>"
解釋:| 管道命令將ifconfig 的輸出,送給了grep,
--color=auto 表示匹配到的顏色是默認紅色
-E表示使用加強型的正則表達式
\< \>分別表示詞的開頭和結尾
| 表示或者,多選一
[1-9] 表示一位數字
[1-9][0-9]表示兩位數字
1[0-9][0-9]表示以1開頭的兩位數字
2[0-4][0-9]表示已2開頭0-4爲十位數,0-9爲個位數的數字
25[0-5]以25開頭,0-5爲個位數字的數字
eg4. 顯示/etc/rc.d/rc.sysinit中符合形爲「任意單個字符n任意字符任意單個字符n」模式的行;即任意單個字符後面跟了個n,n後面有任意長度的任意字符,然後是任意單個字符後面跟了個n,但後面的n以前的字符要與前面的n以前的字符相同;
答案:\(.n\).*\1
解釋:此處咱們使用了分組的概念分組的模式\(pattern\),套用模式 \(.n\) 表示以任意字符後加一個n是個分組,後面的.* 表示任意長度任意字符\1 表示與前面的分組同樣
eg5.顯示/etc/httpd/conf/httpd.conf中以一個或者多個空白字符開頭的行
grep 「^[[:space:]]\{1,\} 「/etc/httpd/conf/httpd.conf
grep -E 「^[[:space:]]+」/etc/httpd/conf/httpd.conf
解釋:
\{1,\} 表示匹配前面的pattern至少1次,[:space:]是空白字符,[ ]表示匹配指定範圍內的任意字符;^ 表示匹配行首
+ 在加強版的正則表達式也表示至少一次匹
咱們就寫到這裏,但願你們多多交流