Shell正則表示式(2)- 正則表示式
阿新 • • 發佈:2021-08-05
正則表示式與萬用字元
- 正則表示式用來在檔案中匹配符合條件的字串,正則是包含匹配。grep,awk,sed等命令可以支援正則表示式。
- 萬用字元用來匹配符號條件的檔名,萬用字元是完全匹配。ls,find,cp這些命令不支援正則表示式,所以只能使用shell自己的萬用字元來進行匹配。
萬用字元
符號 | 作用 |
* | 匹配任意內容 |
? | 匹配任意一個內容 |
[] | 匹配括號中的一個字元 |
基礎正則表示式
元字元 | 作用 |
* | 前一個字元匹配0次或多次 |
. | 匹配除了換行符外任意一個字元 |
^ | 匹配行首。例如:^hello會匹配以hello開頭的行 |
$ | 匹配行尾。例如:hello$會匹配以hello結尾的行 |
[] |
匹配中括號中指定的任意一個字元,只匹配一個字元。 例如:[0-9]匹配任意一位數字,[a-z][0-9]匹配小寫字和一位數字構成的兩位字元 |
[^] | 匹配除中括號的字元以外的任意一個字元。例如:[^0-9]匹配任意一位非數字字元,[^a-z]表示任意一位非小寫字母 |
\ | 轉義符。用於取消特殊符號的含義取消 |
\{n\} | 表示前面的字元恰好出現n次。例如:[0-9]\{4\}匹配四位數字,[1][3-8][0-9]\{9\}匹配手機號碼 |
\{n,\} | 表示其前面的字元出現不小於n次。例如:[0-9]\{2,\}表示兩位及以上的數字;左右兩邊邊界不限定死,該正則無太大意義,類似於包含 |
\{n,m\} | 表示其前面的字元至少出現n次,最少出現m次。例如:[a-z]\{6,8\}匹配6到8位的小寫字母 |
“*” 前一個字元出現0次或多次
- “a*”:匹配所有的內容,包括空白行
- “aa*”:匹配至少包含一個a的行
- “aaa*”:匹配至少包含二個a的行
- “aaaa*”:匹配至少包含三個a的行
“.” 匹配除了換行符外任意一個字元
- “s..d”:匹配在s和d這兩個字母中間一定有兩個字元的單詞
- ”s.*d“:匹配在s和d這兩個字母中間有任意字元個數的單詞
- ”.*“:匹配所有內容
“^” 匹配行首 “$” 匹配行尾
- “^M”:匹配以M開頭的行
- “n$”:匹配以小寫n結尾的行
- “^$”:匹配空白行
“[]” 匹配中括號中指定的任意一個字元,只匹配一個字元
- “s[ao]id”:匹配在s和i子母中,要麼是a,要麼是o
- “[0-9]”:匹配任意一個數字
- “^[a-z]”:匹配用小寫字母開頭的行
“[^]” 匹配除中括號的字元以外的任意一個字元
- “^[^a-z]”:匹配不用小寫字母開頭的行
- “^[^a-zA-Z”:匹配不用字母開頭的行
“\” 轉義符
- “\.$”:匹配使用“.”結尾的行
“\{n\}” 表示前面的字元恰好出現n次
- “a\{3\}”:匹配a字母連續出現三次的字串
- “[0-9]\{3\}”:匹配包含連續的三個數字的字串
“\{n,\}” 表示其前面的字元出現不少於n次
- “^[0-9]\{3,\}”:匹配最少用3個數字開頭的行
“\{n,m\}” 匹配其前面的字元至少出現n次,最多出現m次
- “sa\{1,3\}i”:匹配在字母a和字母i之間有至少一個a,最多出現三個a