天天看點

RHCE 學習筆記(17) 通配符和正規表達式

這一節學習了通配符和正規表達式在grep裡面使用。

首先看看shell下的通配符。 

最最常見的符号如下所示:

數字 [0-9]

字母 [a-z]

非字母[^a-z]

非數字[^0-9]

任意符号 *

轉義符号 \

大寫 [[:upper:]] 

小寫 [[:lower:]]

數字 [[:digit:]]

字母 [[:alpha:]]

數字+字母[[:alnum:]]

空格 [[:blank:]]

看看例子

例1

第一個列出了數字和字母開頭的檔案

第二個列出了數字和-開頭的檔案

第三個列出來了數字開頭的檔案

RHCE 學習筆記(17) 通配符和正規表達式

例2

如果直接查找vsftp* 沒問題;但是如果在目前目錄下建立了比對這個格式的檔案,那得到的結果就是目前目錄的檔案而不是軟體包了,因為yum是shell 的子程序,這個* 通配符在shell就被解析了;可以加引号或者轉移符号來避免誤會

RHCE 學習筆記(17) 通配符和正規表達式
RHCE 學習筆記(17) 通配符和正規表達式

下面來看看正規表達式在grep裡面的使用

grep之前已經學習過了,簡單的表達形式是 【grep 選項 字元串 檔案】

選項可以是-n 行号,-v 反向選擇,-a 文本檔案,-i 忽略大小寫

通配符在grep一樣可以使用,不過有的符号意思發生了改變。

例3

先看個基本的例子,反向搜尋沒有#的行,如果不加引号,他會被shell直接解析,而不是在grep中進行解析

RHCE 學習筆記(17) 通配符和正規表達式

^符号如果是在方括号裡面,表示否定; 如果是單引号裡面表示這個字元串是以^後面的字元開頭的

對比如下所示

RHCE 學習筆記(17) 通配符和正規表達式

如果表示結尾的字元,可以用'$', 如果直接輸入‘^$', 則表示空行

例4

RHCE 學習筆記(17) 通配符和正規表達式

空行

RHCE 學習筆記(17) 通配符和正規表達式

如何表示一個或者多個字元?我們可以用. (小圓點)來表示任意一個符号,表示這個位置就有個符号,随便是啥都行;* (星号) 可以表示有0個或者多個重複的符号,比如to* 可以表示的格式是txxxxxxxx,toxxxxx,tooxxxxxxx ...都是可以的

例5 比如 to* 和 t.m的差別

RHCE 學習筆記(17) 通配符和正規表達式

除了 小圓點和星号,我們還可以使用?表示0或1次; +表示1次以上, {m,n}表示表達式出現至少m次,最多n次;這需要使用擴充正規表達式-p或者-e,否則直接運作無效

例 6  直接運作沒有結果,-p用perl的方式來解析,就可以了 {3}表示 o 出現3次,{2,4}表示出現了2次到4次

RHCE 學習筆記(17) 通配符和正規表達式

to.?m 裡面 . 表示任意一個字元,?表示這個任意字元出現了0次或者1次,是以滿足 tom, toxm 的字元串都是可以的

RHCE 學習筆記(17) 通配符和正規表達式

類似的 to.+m裡面 .表示任意字元,+表示這個字元出現了1次或者多次,那麼比對的字元串是toxm,toxxm,toxxxm,換句話說滿足to開頭,m結尾的字元串都是可以的

RHCE 學習筆記(17) 通配符和正規表達式

最後做個練習,如何隻輸出ifconfig裡面ip的結果,不準用awk

這個能夠比對的寫法太多了,豆子自己寫了個比較複雜的

RHCE 學習筆記(17) 通配符和正規表達式

下面是老師的寫法

RHCE 學習筆記(17) 通配符和正規表達式