Linux學習筆記(8)----基礎正則表達式

  • 概念:

用鳥哥的話來說:

正則表達式是處理字符串的方法,它是以行爲單位來進行字符串的處理行爲,正則表達式通過一些特殊符號的輔助,是一種可以讓用戶輕易達到查找,刪除,替換某特定字符串的處理程序.

首先,先概括性地列出常用的符號和代表意義.
這裏寫圖片描述
(圖片出處:鳥哥Linux私房菜電子版)
這裏先了解不同語系對正則表達式字符串排序(數字和大小寫字母)的影響
因爲後面如果對字符查找會由於範圍有所不同而決定敲入指令的小差異.

  • LANG=C的情況 : 0123…ABCD…XYZabcde…xyz
  • LANG=zh_CH的情況:01234…aAbBcCdDeE…zZ

grep是一個常用的查找行命令,它也是使用正則表達式的常客.
-n 顯示行數, –color=auto 將查找關鍵字顯示其他顏色區分
-A+n (After)把找到的關鍵字所在行加上後續的n行一起顯示出來.
-B+n (Befer)把找到的關鍵字所在行加上前面的n行一起顯示出來.
-v 反選,除了關鍵字所在行的其他行顯示出來.
例子:
1. grep ‘hello’ hello.txt
把hello.txt文件中關鍵字hello所在的行提取出來.
2. grep -n -A3 -B2 –color=auto ‘z++’ 凸圖土兔utf8.txt
這裏寫圖片描述
可以看到, ‘z++’所在行的前後3行都被提取出來.
3. grep -in ‘hello’ hello.txt
忽略大小寫查找hello關鍵字所在行,即HeLLo,HELLO都會入選.
4. 查找範圍選取’[ ]‘,在[ ]內表示任取一個字符進行匹配 如:
grep -n -A3 -B2 –color=auto ‘fo[rp]’ 凸圖土兔utf8.txt
這裏寫圖片描述
其中 for 和 fopen 都被匹配
5. [^abc],這裏的^符號是取反的意思,表示不包含a或者b或者c,有趣的是也可以寫成一個範圍 用-表示,如[^a-z]或[^0-9]表示不含小寫字母或者數字.
根據上面第一張參考圖不包含小寫字母和數字還可以寫成:
grep -n –color=auto ‘[^[:upper:]]’ FILENAME
例子:
grep -n -A3 -B2 –color=auto ‘[^f]or’ 凸圖土兔utf8.txt
這裏寫圖片描述
其中表示查找 含有 or 的字符但是不匹配 f+or

另外注意,這裏的取反只是部分取反,就是說如果該行有其他成立的符號還是會被篩選到.如下:
這裏寫圖片描述
根據敲的命令行
’[^[:upper:]]’ 不提取那些大寫字符的, 然而Hello World!卻出來了,因爲只看 ello orld的話同樣符合條件!
’[^[:digit:]]’提取數字行, 比較第黃色箭頭我們可以看到那些所有字符成立的行纔會被篩選掉. 2 和 233只是單純包含文字,因此沒有被選中.

行首字符‘^’ 和行尾字符‘$’

  • ^除了有排除的意思,還作爲表示行首的符號,如:
    這裏寫圖片描述
    我們來看test的內容 其中第8行爲空行
    查找命令如下:
    這裏寫圖片描述
    ‘^7’表示以7開頭的行,所以結果爲第6行
    ‘3$’表示以3結尾的行,結果顯而易見,如圖.
    而空白行怎麼表示呢?這裏比較形象可以理解爲空白和就是隻有開頭+結尾 ,所以 敲入grep -n –color=auto ‘^$’ test.txt .

正因爲‘^’有多個意思,所以使用容易混淆.這裏鳥哥有用例子特別拿出來區分:

‘^’在中括號[]之內的表示方向選擇,如’[^abc]d’ 表示ad,bc,cd 都會被排除. 而在中括號[]之外的表示定位在行首,如 ‘^[[:lower:]]’ 表示以小寫字母開頭的行

如:
這裏寫圖片描述
第一個查找以數字開頭的行,第二個查找關鍵字3並且3前面必須沒有數字,結果僅僅指向第5行abc33的第一個3 ,而3DDD儘管3前面沒有數字,但是前面並沒有字符,所以注意的是[]指的是裏面必須有內容,
‘[^[:digit:]]3’ 雖然指3之前不能出現數字,但是必須有其他字符替代纔會篩選.
正則表達式還有很多知識點,這次先更新到這裏,其他下次補充.

參考資料:

<鳥哥Linux私房菜p348-354>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章