標籤:shell 萬用字元 Regex
一、Regex:
元字元是用來闡釋字元運算式意義的字元,簡言之,就是用來描述字元的字元。
RegexRE(Regular Expression)是由一串字元和元字元構成的字串。
Regex的主要功能是文字查詢和字串操作,它可以匹配文本的一個字元或字元集合。實際上Regex完成了資料的過濾,將不滿足Regex定義的資料拒絕掉,剩下與Regex匹配的資料。
基本的Regex元字元集合及其意義
符號 |
意義 |
* |
0個或多個在*字元之前的那個一般字元和前面字元可以看成一個字元 |
. |
匹配任一字元 |
^ |
匹配行首,或後面字元的非 |
$ |
匹配行尾 |
[] |
匹配字元集合 |
\ |
轉義符,屏蔽一個元字元的特殊意義 |
\<\> |
精確匹配符號 |
\{n\} |
匹配前面字元出現n次 P.43 |
\{n,\} |
匹配前面字元至少出現n次 |
\{n,m\} |
匹配前面字元出現n~m次 |
1.“*”符號(和前面字元可以看成一個字元)
zha*ng :“*”前面的一般字元是a,就表示匹配a字元0次或多次,如:zhng、zhang、zhaaaang
(根據測試可以不包括前面的字元,即匹配0次)
2.匹配空行
匹配行首的^和匹配行尾的$組合起來“^$”可以用來匹配空行,如果需要匹配只包含一個字元的行,可以用“^.$”
3."[]"符號
匹配字元集合,支援窮舉方法列出字元集合的所有元素,也支援使用“-”符號表示字元集合範圍。
[12345] 等價於 [1-5]
我們知道“^”符號表示匹配行首,但是,“^”符號放到“[]”符號中就不再表示匹配行首了,而是表示取反符號。
[^b-d] :表示不再b~d範圍內的字元
[A-Za-z] [A-Za-z]* :匹配任意英文單詞
二、Regex的擴充:
擴充的Regex元字元及其意義
符號 |
意義 |
? |
匹配0個或一個在其之前的那個一般字元 |
+ |
匹配一個或多個在其之前的那個一般字元 |
() |
表示一個字元集合或用在expr中 |
| |
表示“或”,匹配一組可選的字元 |
1.“?”符號
(根據測試可以不包括前面的字元,即匹配0次)
2."()"符號和“|”符號
"()"符號和“|”符號通常結合使用,表示一組可選字元的集合。
re(a|b|c)d 等價於 re[abc]d
"|"符號也可以表示多個Regex的“或”關係。
grep -E “zha?ng|zhi” 檔案
三、萬用字元:
bash shell本身不支援Regex,使用Regex的是shell命令和工具,如grep,sed,awk。
注意:bash shell只可以使用Regex中的一些元字元實現通配(Globbing)功能。
通配是把一個包含萬用字元的非具體檔案名稱擴充一批具體檔案名稱的過程。
總結:可以看出通配主要應用匹配檔案名稱上,而正則主要應用於字串上
* - 萬用字元,代表任一字元(0到多個)
? - 萬用字元,代表一個字元
^ 取反
\ - 跳轉符號,將特殊字元或萬用字元還原成一般符號
| - 分隔兩個管線命令的界定
; - 連續性命令的界定
~ - 使用者的根目錄
$ - 變數前需要加的變數值
! - 邏輯運算中的"非"(not)
‘ - 單引號,不具有變數置換功能
" - 雙引號,具有變數置換功能
本文出自 “坤哥的blog” 部落格,請務必保留此出處http://kunge.blog.51cto.com/976628/1585958
shell 萬用字元和Regex理解和區別