筆記**於《鳥哥的linux私房菜》
語系的資料會影響到正規表達法的輸出結果,檔案其實記錄的僅有0與1,我們看到的字元文字與數字都是透過編碼表住哪換而來的,由於不同語系的編碼資料並不相同,所有就會造成資料獲取的結果差異。舉例來說,在英文大小寫的編碼順序中,zh_tw.big5及c這兩種語系的輸出結果分別如下:
lang=c 時:0 1 2 3 4 ...a b c d....z a b c d ... z
lang=zh_tw時:0 1 2 3 4 ...a a b b c c d d... z z
上面的順序是編碼的順序,我們可以很清楚的發現這兩種語系明顯就是不一樣,如果你想要獲取大寫字元而使用[a-z]時,會發現lang=c確實可以僅捉到大寫字元(因為是連續的),但如果lang=zh_tw.big5時,就會發現到,連同小寫的b-z也會被獲取出來。因為就編碼的順序來看,big5語系確實可以獲取到[a b b c c ... z z]這一堆字元。所以使用正規表示式時,需要特別注意當時環境的語系,否則可能獲取出來的結果不一樣。
特殊字元
代表意義
[:alnum:]
代表英文大小寫字元及數字,亦即0-9,a-z,a-z
[:alpha:]
代表任何英文大小寫字元,亦即a-z,a-z
[:blank:]
代表空格鍵與[tab]按鍵兩者
[:cntrl:]
代表鍵盤上面的控制按鍵,亦即包括cr,lf,tab,del...等等
[:digit:]
代表數字而已,亦即0-9
[:graph:]
除了空格鍵(空格鍵與[tab]按鍵)外的其他所有按鍵
[:lower]
代表小寫字元,亦即a-z
[:print:]
代表任何可以被列印出來的字元
[:punct:]
代表標點符號(punctuation symbol),亦即: 「 『 ? ! ;:# $ ...
[:upper:]
代表大寫字元,亦即a-z
[:space:]
任何會產生空白的字元,包括空格符,[tab],cr等等
[:xdgit:]
代表16進製的數字型別,因此包括:0-9,a-f,a-f的數字與字元
基礎的正規表達法特殊字元彙整如下:
re字元
意義與^word
意義:待搜尋的字串(word)在行首!
範例:搜尋行首為#開始的那一行,並列出行號
grep -n '^#' regular_express.txt
word$
意義:待搜尋的字串(word)在行尾!
範例:將行尾為!的那一行列印出來,並列出行號
grep -n '!$' regular_express.txt
.意義:代表【一定有乙個任意字元】的字元
範例:搜尋的字串可以是(eve)、(eae)、(e e),但不能僅有(ee),亦即e與e之間一定且僅有乙個字元,而空格符也是字元。
grep -n 『e.e』 regular_express.txt
\意義:跳脫字元,將特殊符號的特殊意義去除!
範例:搜尋含有單引號'的哪一行
grep -n \' regular_express.txt
*意義:重複零個到無窮多個的前乙個re字元
範例:找出含有(es)(ess)(esss)等等的字串,注意,因為*可以是0個,所以es也是符合帶搜尋字串。另外,因為 * 為重複【前乙個re字元】的符號,因此,在*之前必須要緊接著乙個re字元,例如任意字元則為【.*】
grep -n 'ess*' regular_express.txt
[list]
意義:字元集合的re字元,裡面列出想要獲取的字元@
範例:搜尋含有(gl)或(gd)的那一行,需要特別留意的是,在當中【僅代表乙個待搜尋的字元】,例如【a[afl]y】代表搜尋的字串可以aar、afy、aly。即[afl]代表a或f或l的意思。
grep -n 'g[ld]' regular_express.txt
[n1-n2]
意義:字元集合的re字元,裡面列出想要獲取的字元範圍!
範例:搜尋含有任意數字的那一行,需要特別留意,在字元集合中的減號-是由特殊意義的,他代表兩個字元之間的所有連續字元。但這個連續與否與ascii編碼有關,因此,你的編碼需要設定正確(在bash當中,需要確定lang與langurage的變數是否正確),例如所有大寫字元則為[a-z]
grep -n '[a-z]' regular_express.txt
[^list]
意義:字元集合的re字元,裡面列出不要的字串或範圍。
範例:搜尋的字串可以是(oog)(ood)但不能是(oot),那個^在內時,代表的意義時【反向選擇】的意思。例如,我不要大寫字元,則為[^a-z],但是,需要特別注意的是,如果以grep -n [^a-z] regular_express.txt來搜尋,卻發現該檔案內的所有行都被列出。因為這個[^a-z]是[非大寫字元]的意思,因為每一行均有非大寫字元,例如第一行的「open source」就有p、e、n、o...等等的小寫字。
grep -n 'oo[^t]' regular_express.txt
\意義:連續n到m個的【前乙個re字元】
意義:若為\則是連續n個的前乙個re字元
意義:若是\則是連續n個以上的前乙個re字元!
範例:在g與g之間由2個到3個的o存在的字串,亦即是
grep -n 'go\g' regular_express.txt
延伸型的正規表示法的特殊字元
re字元
意義與範例
+意義:重複【乙個或乙個以上】的前乙個re字元。
範例:搜尋(god) (good) (good)....等等的字串,那個o+代表【乙個以上的o】,所以,底下的執行結果會將第1,9,13行列出來。
egrep -n 'go+d' re.txt
意義;[零個或乙個]的前乙個re字元
範例:搜尋(gd)(god)這兩個字串,那個o?代表【空的或1個o】。
egrep -n 'go?d' re.txt
|意義:用或(or)的方式找出數個字串
範例:搜尋gd或good這兩個字串,注意,是【或】
egrep -n 『gd|good』 re.txt
()意義:找出【群組】字串
範例:搜尋(glad)或(good)這兩個字串,因為g與d是重複的,所以,我就可以將la與oo列於()當中,並以|來分隔開,就可以了
grep -n 'g(la|oo)d' re.txt
()+意義:多個重複群組的判別
範例:將[axyzxyzxyzxyzxyzc]用echo叫出,然後再使用如下的方法搜尋一下!
echo 'axyzxyzxyzxyzc' | egrep 'a(xyz)+c'
上面的例子的意思是說我要找開頭是a,結尾是c,中間有乙個以上
正規表示式筆記 基礎
常用元字元 匹配除換行符以外的任意字元 w 匹配字母 數字 下劃線 漢字等 w相反 s 匹配任意的空白符 s相反 d 匹配數字 d相反 匹配字串的開始 匹配的是位置 匹配字串的結束 匹配的是位置 注意 s 代表前面開頭的是s,s前面不能有字元。例如 since she job,如果進行匹配,則只匹配...
正規表示式 1 正規表示式基礎
1.正規表示式基礎 正規表示式描述了一種字串匹配的模式,即可以使使用者通過一系列普通字元或特殊字元構建能夠明確描述文字字串的匹配模式,可以用來檢查某個字串是否含有某種子字串,將匹配的子字串做替換或者從某個字串中取出符合某個條件的子字串等。1.1 正規表示式的基本結構 乙個正規表示式就是由普通字元 如...
正規表示式基礎筆記(一)
我自己也寫了一些筆記與大家分享,希望自己順便記一下,也讓各位順便能快速的瀏覽一下他基本的內容。1 b 代表單詞的開頭或結尾,也就是單詞的分界處。2 代表除換行符以外的任意字元。3 代表它之前的內容可以連續重複使用任意次以上使整個表示式匹配,可以是0次,1次 或多次。4 d 匹配一位數字。5 s 匹配...