1. 程式人生 > >4月25日

4月25日

linux

9.1 正則介紹_grep(過濾)上

正則介紹:

解釋對正則表達式的定義是:它使用單個字符串來描述或匹配一系列符合某個句法規則的字符串。在很多文本編輯器或其他工具裏,正則表達式通常用來檢索和替換那些符合某個模式的文本內容。許多程序設計語言也都支持利用正則表達式進行字符串操作。對於系統管理員來講,正則表達式貫穿在我們的日常運維工作中,無論是查找某個文檔,還是查詢某個日誌文件並分析其內容,都會用正則表達式 其實正則表達式只是一種思想、一種表示方法。只要我們使用的工具支持這種表示方法,那麽這個工具就可以處理正則表達式的字符串。常用的工具有grepsedawk等,其中grepsedawk都是針對文本的行進行操作

的。

正則就是有一定規律的字符串,有幾個特殊符號很關鍵(. * + ? | ),我們平時不僅可以用命令行工具grep/sed/awk 去引用正則,而且還可以把正則嵌入在nginxapache、甚至phppython 編程語言當中,學好正則可以讓你受用無窮!

grep工具的使用:

grep命令 主要作用:過濾指定關鍵詞

命令格式為:grep [-cinvABC] ‘word' filename

常用選項含義表示如下:

-c:表示打印符合要求的行數。

-i:表示忽略大小寫。

-n:表示輸出符合要求的行及其行號。

-v:表示打印不符合要求的行,取反。

-r:遍歷所有子目錄

-A:後面跟一個數字(有無空格都可以),例如

-A2表示打印符合要求的行以及下面的兩行。

-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表示把ro之前有一個任意字符的行過濾出來。

命令:grep 'r.o' passwd .表示任意一個字符

技術分享圖片

2.表示零個或多個前面的字符,ooo*表示ooooooooo...或者更多的o

命令:grep 'ooo*' passwd

技術分享圖片

3..*表示零個或多個任意字符,空行也包含在內,它會把passwd文件裏面的所有行都匹配到,命令:grep '.*' passwd |wc -l

技術分享圖片

4. 指定要過濾字符出現的次數,命令:grep '0\{2\}' passwd

技術分享圖片

裏用到了符號{},其內部為數字,表示前面的字符要重復的次數。需要強調的是,{}左右都需要加上轉義字符\。另外,使用{}還可以表示一個範圍,具體格式為{n1,n2},其中n1<n2,表示重復n1n2次數前面的字符,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日