標籤:Regex shell. regular expression
Regex詳解
一般字元:只是字面的意思
元字元:超過字面意思的意義
基本Regex元字元及其意義
* #0個或多個在*字元之前的那個一般字元
. #匹配任一字元
^ #匹配行首
$ #匹配行尾
$$ #執行上一條命令
!$ #上一條命令的最後一個參數,例如是/etc/passwd,繼續對該參數操作,可以為 cat !$
[] #匹配字元集合
\ #轉義符
\{n\} #匹配前面字元出現n次
\{n,\} #匹配前面字元至少出現n次
\{n,m\} #匹配前面字元出現n-m次
樣本
* hel*o #可以匹配helll8o、hello、hellllo
. ...73. #可以匹配abc73.、[email protected]#73?、12373c
^ ^...X86* #可以匹配以abcX86fang開頭的字元
$ make$ #表示以make結尾
^$ #表示空行
^.$ #表示某行只有一個字元
[a-z] #表示a-z所有小寫字母
[0-9] #表示0-9所有數字
[b-q] #表示b-q字母
[^b-q] #取反,除了b-q的所有字元
[A-Za-z] [A-Za-z]* #能匹配任何一個英文單詞
\* #將\後面的元字元轉換為字面意思
\<the\> #精確匹配,只匹配the字元的單詞,利用\符號屏蔽<>符號 grep ‘\<the\>‘
\{n\} #JO\{3\}B 匹配值為JOOOB
\{n,\} #JO\{3,\}B 匹配值為JOOOB JOOOOB JOOOOOOOB
\{n,m\} #JO\{3,6\}B 匹配值為JOOOB JOOOOOB JOOOOOOB
[a-z] \{5\} #hello house whowh 精確匹配5個小寫字母
echo [abc]* #開頭為a/b/c的任意多字元的檔案
echo [^abc]* #開頭不是a/b/c的任意多字元的檔案
touch {a,b,c}-{1,2,3} #通過窮舉來建立檔案,每個檔案匹配來建立,總共9個檔案
!$ #上一條命令中的最後一個參數
; #表示命令結束
===========================================================================
擴充Regex元字元及其意義
? #匹配0個或1個在其之前的那個一般字元
+ #匹配1個或多個在其之前的那個一般字元
() #表示一個字元集合或用在expr中
| #表示或,匹配一組可選的字元
? JO?B #匹配JO1B [email protected] JO!B ,只匹配一個字元。如果是JOB或JOOOB則不匹配
+ S+EU #至少匹配前面的字元1次,可以匹配多次
* S*U #可匹配S123U SSUU [email protected]#U SU
()符號和|符號 re(a|e|o)d #匹配read reed reod
樣本
1、列出所有以.awk結尾的檔案
ll *.awk
2、列出以0開頭,後面跟一個字元且以.pem為尾碼的檔案
ll 0?.pem
3、列出在a-h範圍內以字母開頭並以.awk結尾的檔案
ll [a-h]*.awk
4、列出以a-h範圍內字母開頭且句點後不是以.awk結尾的檔案
ll [a-h]*.[^awk]*
5、列出滿足在a-h範圍內以字母開頭並以.awk結尾的檔案,或列出以0開頭,後面跟一個字元且以.pem為尾碼的檔案
ll {[a-h]*.awk,0?.pem}
Shell編程之---Regex詳解