正則表達式旨在對字符串進行匹配,這在幾乎全部語言中都有用到。固然bash中天然也不例外。linux支持正則表達式的工具主要有一下幾種,即:vim、grep、awk、sed等等。首先對這些命令作一下簡單的介紹。linux
grep命令用以以行爲單位,對字符串進行匹配,輸出符合匹配邏輯的行。grep的使用權限是全部用戶。正則表達式
-c:只輸出匹配行的計數。vim
-I:不區分大 小寫(只適用於單字符)。bash
-h:查詢多文件時不顯示文件名。app
-l:查詢多文件時只輸出包含匹配字符的文件名。函數
-n:顯示匹配行及 行號。工具
-s:不顯示不存在或無匹配文本的錯誤信息。this
-v:顯示不包含匹配文本的全部行。google
grep -n 'the' test.txt #n顯示行號 8:I can't finish the test. 12:the symbol '*' is represented as start. 15:You are the best is mean you are the no. 1. 16:The world <Happy> is the same with "glad". 18:google is the best tools for search keyword.
grep -nvi 'A' test.txt #v是選擇不知足條件的項、i不區分大小寫 4:this dress doesn't fit me. 13:Oh! My god! 17:I like dog. 19:goooooogle yes! 20:go! go! Let's go.
sed命令一樣是以行爲單位處理字符串,可是它能夠對字符串進行增刪改操做,而後輸出至屏幕或者是文件spa
-n :使用安靜(silent)模式。在通常 sed 的用法中,全部來自 STDIN 的數據通常都會被列出到終端上。但若是加上 -n 參數後,則只有通過sed 特殊處理的那一行(或者動做)纔會被列出來。 -e :直接在命令列模式上進行 sed 的動做編輯; -f :直接將 sed 的動做寫在一個文件內, -f filename 則能夠運行 filename 內的 sed 動做; -r :sed 的動做支持的是延伸型正規表示法的語法。(默認是基礎正規表示法語法) -i :直接修改讀取的文件內容,而不是輸出到終端。
a :新增,在下一行新增字符串 c :取代, c 的後面能夠接字串,這些字串能夠取代 n1,n2 之間的行! d :刪除, i :插入,在上一行新增字符串 p :列印,在每一行後面輸出字符串 s :替換,相似vim的替換
nl /etc/passwd | sed '2,5d' #按行打印passwd,刪除2至5行 1 root:x:0:0:root:/root:/bin/bash 6 games:x:5:60:games:/usr/games:/usr/sbin/nologin 7 man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
nl /etc/passwd | sed '2a hello' #在第三行加上hello 1 root:x:0:0:root:/root:/bin/bash 2 daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin hello
nl /etc/passwd | sed -n '5,7p' #至關於 nl /etc/passwd | head -n 7 | tail -n 3 5 sync:x:4:65534:sync:/bin:/bin/sync 6 games:x:5:60:games:/usr/games:/usr/sbin/nologin 7 man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
介紹了使用正則的幾個命令,接下來就是正則表達式的基本語法:
[abc]:知足方括號其中一個 [a-z]:全體小寫字母 [A-Z]:全體大寫字母 [0-9]:全體數字 #在ascii表中連續就能夠如此標示 [^]:對條件取反 #方括號裏 ^:行首 #eg. ^the:以the單詞開頭的行 $:行末 #eg. \!$:以歎號結尾的行 .:任意一個符號 *:前一個符號重複任意屢次(0~無窮) {2}:限定前一符號重複次數(重複2次) {2,5}:重複2-5次
上面是這些模式是grep等工具經常使用的匹配模式,固然這些有時候並不能知足咱們的須要。所以,還有延伸正則表達式。
+:前一個字符重複一次以上 ?:零個或者是一個字符 |:或 ():意義:找出「羣組」字串 範例:搜尋 (glad)或 (good)這兩個字串,由於g與d是重複的,因此我就能夠將la與oo列於(la|oo)當中。
要使用這些匹配模式,須要用到egrep命令,至關與grep -e
egrep -n 'go+d' test.txt egrep -n 'go?d' test.txt egrep -n 'gd|good' test.txt egrep -n 'gd|good|dog' test.txt egrep -n 'g(la|oo)d' test.txt echo 'AxyzxyzxyzxyzC' | egrep 'A(xyz)+C'