這一節學習了通配符和正規表達式在grep裡面使用。
首先看看shell下的通配符。
最最常見的符号如下所示:
數字 [0-9]
字母 [a-z]
非字母[^a-z]
非數字[^0-9]
任意符号 *
轉義符号 \
大寫 [[:upper:]]
小寫 [[:lower:]]
數字 [[:digit:]]
字母 [[:alpha:]]
數字+字母[[:alnum:]]
空格 [[:blank:]]
看看例子
例1
第一個列出了數字和字母開頭的檔案
第二個列出了數字和-開頭的檔案
第三個列出來了數字開頭的檔案
例2
如果直接查找vsftp* 沒問題;但是如果在目前目錄下建立了比對這個格式的檔案,那得到的結果就是目前目錄的檔案而不是軟體包了,因為yum是shell 的子程序,這個* 通配符在shell就被解析了;可以加引号或者轉移符号來避免誤會
下面來看看正規表達式在grep裡面的使用
grep之前已經學習過了,簡單的表達形式是 【grep 選項 字元串 檔案】
選項可以是-n 行号,-v 反向選擇,-a 文本檔案,-i 忽略大小寫
通配符在grep一樣可以使用,不過有的符号意思發生了改變。
例3
先看個基本的例子,反向搜尋沒有#的行,如果不加引号,他會被shell直接解析,而不是在grep中進行解析
^符号如果是在方括号裡面,表示否定; 如果是單引号裡面表示這個字元串是以^後面的字元開頭的
對比如下所示
如果表示結尾的字元,可以用'$', 如果直接輸入‘^$', 則表示空行
例4
空行
如何表示一個或者多個字元?我們可以用. (小圓點)來表示任意一個符号,表示這個位置就有個符号,随便是啥都行;* (星号) 可以表示有0個或者多個重複的符号,比如to* 可以表示的格式是txxxxxxxx,toxxxxx,tooxxxxxxx ...都是可以的
例5 比如 to* 和 t.m的差別
除了 小圓點和星号,我們還可以使用?表示0或1次; +表示1次以上, {m,n}表示表達式出現至少m次,最多n次;這需要使用擴充正規表達式-p或者-e,否則直接運作無效
例 6 直接運作沒有結果,-p用perl的方式來解析,就可以了 {3}表示 o 出現3次,{2,4}表示出現了2次到4次
to.?m 裡面 . 表示任意一個字元,?表示這個任意字元出現了0次或者1次,是以滿足 tom, toxm 的字元串都是可以的
類似的 to.+m裡面 .表示任意字元,+表示這個字元出現了1次或者多次,那麼比對的字元串是toxm,toxxm,toxxxm,換句話說滿足to開頭,m結尾的字元串都是可以的
最後做個練習,如何隻輸出ifconfig裡面ip的結果,不準用awk
這個能夠比對的寫法太多了,豆子自己寫了個比較複雜的
下面是老師的寫法