1. 程式人生 > 其它 >Shell正則表示式(2)- 正則表示式

Shell正則表示式(2)- 正則表示式

正則表示式與萬用字元

  • 正則表示式用來在檔案中匹配符合條件的字串,正則是包含匹配。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