4月25日
正則介紹:
解釋對“正則表達式”的定義是:它使用單個字符串來描述或匹配一系列符合某個句法規則的字符串。在很多文本編輯器或其他工具裏,正則表達式通常用來檢索和替換那些符合某個模式的文本內容。許多程序設計語言也都支持利用正則表達式進行字符串操作。對於系統管理員來講,正則表達式貫穿在我們的日常運維工作中,無論是查找某個文檔,還是查詢某個日誌文件並分析其內容,都會用正則表達式。 其實正則表達式只是一種思想、一種表示方法。只要我們使用的工具支持這種表示方法,那麽這個工具就可以處理正則表達式的字符串。常用的工具有grep、sed、awk等,其中grep、sed和awk都是針對文本的行進行操作
正則就是有一定規律的字符串,有幾個特殊符號很關鍵(. * + ? | ),我們平時不僅可以用命令行工具grep/sed/awk 去引用正則,而且還可以把正則嵌入在nginx、apache、甚至php、python 編程語言當中,學好正則可以讓你受用無窮!
grep工具的使用:
grep命令 主要作用:過濾指定關鍵詞
命令格式為:grep [-cinvABC] ‘word' filename
常用選項含義表示如下:
-c:表示打印符合要求的行數。
-i:表示忽略大小寫。
-n:表示輸出符合要求的行及其行號。
-v:表示打印不符合要求的行,取反。
-r:遍歷所有子目錄
-A:後面跟一個數字(有無空格都可以),例如
-B:後面跟一個數字,例如-B2表示打印符合要求的行以及上面兩行。
-C:後面跟一個數字,例如-C2表示打印符合要求的行以及上下各兩行。
參數驗證操作:
1.驗證準備
1.1 打印帶有關鍵詞'nologin'的總行數命令:grep -c 'nologin' passwd
1.2 過濾出帶關鍵詞'root'的行,並輸出行號,前面的數字顯示為綠色,表示行號
命令:grep -n 'root' passwd
1.3 過濾出不帶'nologin'關鍵詞的行,並輸出行號
命令:grep -nv 'nologin' passwd
1.4 編輯文件passwd把第二行no改成大寫NO,過濾帶'nologin'關鍵詞,結果
不顯示出大寫的第二行
1.4.1 過濾帶'nologin'關鍵詞,不區分大小寫,把大寫行也列出
命令:grep -ni 'nologin' passwd //加-i
1.5 打印顯示etc下的所有子目錄
命令:grep -r 'root' /etc/
1.6 -A2參數 會把包含root的行以及這行下面的兩行都打印出來
1.7 -B2參數 會把包含root的行以及這行上面的兩行都打印出來
1.8 -C2 參數會把包含root的行以及這行上下各兩行都打印出來
9.2 grep中
1.過濾出所有包含數字的行 命令:grep '[0-9]' passwd
2. 過濾出所有不包含數字的行 命令:grep -v '[0-9]' passwd
3. 把所有以 ‘#’ 開頭的行去除命令:grep -v '^#' passwd
4. 去除所有空行和以 ‘#’ 開頭的行 命令:grep -v '^#' passwd | grep -v '^$'
正則表達式中,^ 表達行的開始,$表示行的結尾那麽空行則可以用^$表示
4.1 如何打印出不以英文開頭的行呢?如下所示:
命令:grep '^[^a-zA-Z]' test.txt
9.3 grep下
1. 。過濾任意一個字符與重復字符 ,r.o表示把r與o之前有一個任意字符的行過濾出來。
命令:grep 'r.o' passwd (.表示任意一個字符)
2.表示零個或多個前面的字符,ooo*表示oo、ooo、oooo...或者更多的o
命令:grep 'ooo*' passwd
3..*表示零個或多個任意字符,空行也包含在內,它會把passwd文件裏面的所有行都匹配到,命令:grep '.*' passwd |wc -l
4. 指定要過濾字符出現的次數,命令:grep '0\{2\}' passwd
裏用到了符號{},其內部為數字,表示前面的字符要重復的次數。需要強調的是,{}左右都需要加上轉義字符\。另外,使用“{}”還可以表示一個範圍,具體格式為{n1,n2},其中n1<n2,表示重復n1到n2次數前面的字符,n2還可以為空,這時表示大於等於n1次。
5.egrep工具的使用:
egrep工具是grep工具的擴展版本,可以完成grep不能完成的工作。我們也可以用grep-E代替egrep。
5.1 過濾出一個或多個指定的字符 命令:egrep 'o+' passwd
和grep不同,這裏egrep使用的是符號+,它表示匹配1個或多個+前面的字符,這個“+”是不支持審美觀點grep直接使用的,包括上面{},也是可以直接被egrep使用,而不用加\轉義,示例如下:
1 2 3 4 5 6 | [root@aminglinux-01 grep]# egrep 'o{2}' passwd root:x:o:o:root:/root:/bin/bash lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:o:operator:/root:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin |
5.2過濾出零個或一個指定的字符 命令:egrep 'o?' passwd
5.3 過濾出字符串1或者字符串2 命令: egrep 'aaa|111|ooo' passwd
5.4 egrep中()的應用
命令:egrep 'r(oo|at)o' passwd
這裏用()表示一個整體,上例中會把包含rooo或者rato的行過濾出來,另外也可以把()和其他符號組合在一起,例如(oo)+表示1個或者多個oo,如下所示:
命令:egrep '(oo)+' test.txt
4月25日