通配符&正則表達式&特殊符號總結
通配符
概念
bash操作環境下的功能。
* 代表0個到任意多個字符
? 代表一定有一個任意字符
[] 代表一定有[]中的一個字符。如g[a,b,c]d表示gad、gbd、gcd
[-] 代表一定有編碼順序內的所有字符。如g[0-9]d表示g0d、g1d、g2d...、g9d
[^] 代表反向選擇。如g[^abc]d表示gdd、ged、gfd...、gzd、g0d、g1d...
特殊字符
# 註釋
\ 轉義符號
| 管道符
; 命令分隔符,多條命令使用
~ 用戶主文件夾
$ 變量前導符
& 作業控制,將作業變為後臺
! 邏輯符--非
/ 目錄符號
>,>> 數據流重定向,輸出導向
<,<< 數據流重定向,輸入導向
‘‘ 單引號,不具備變量置換的功能
"" 雙引號,具備變量置換的功能
`` 裏面為先執行的命令,等效於$()
() 中間為子shell的起始與結束
{} 中間為命令塊的組合
重要:
① !在[]中不是特殊字符。
表示反向選擇:
[!a-z] 錯誤
[^a-z] 正確
② $()與``的區別
命令 結果
echo \$\$ $$
echo `echo \\$\\$` $$ ``中兩個\表轉義
echo $(echo \$\$) $$ $()中一個\表轉義
正則表達式
概念
正則表達式是通過一些特殊字符的排列,用以查找、替換、刪除一行或多行文字字符串。簡單地說,就是用在字符串的處理上面的一項“表達式”
語系對正則表達式的影響
不同語系下,可能會得到不同的結果。
如[a-z]在gb2312下得到aAbB...z,C語系下得到abc...z
一般使用LANG=C語系
以下符號可以避免編碼問題
特殊符號 代表意義
[:alnum:] 代表英文大小寫字符及數字,即 0-9, A-Z, a-z
[:alpha:] 代表任何英文大小寫字符,即 A-Z, a-z
[:digit:] 代表數字而已,即 0-9
[:lower:] 代表小寫字符,即 a-z
[:upper:] 代表大寫字符,即 A-Z
[:blank:] 代表空格鍵與 [Tab] 按鍵兩者
[:cntrl:] 代表鍵盤上面的控制按鍵,即包括 CR, LF, Tab, Del.. 等等
[:graph:] 除了空格符 (空格鍵與 [Tab] 按鍵) 外的其他所有按鍵
[:print:] 代表任何可以被打印出來的字符
[:punct:] 代表標點符號 (punctuation symbol),即:" ‘ ? ! ; : # $
[:space:] 任何會產生空白的字符,包括空格鍵, [Tab], CR 等等
[:xdigit:] 代表 16 迚位的數字類型,因此包括: 0-9, A-F, a-f 的數字與字符
分類
依據不同的嚴謹程度分為基礎正則表達式與擴展正則表達式
基礎正則表達式的特殊字符
^word word$ . \ * [list]
[n1-n2] [^list] [^n1-n2] \{n\} \{n,m\} \{n,\}
^word 待查找的字符串word在行首
找出所有註釋行
grep –n ‘^#’ regular_express.txt
找出開頭不是英文字母的行
grep –n ‘^[^[:alpha:]]’ regular_express.txt
word$ 帶查找的字符串word在行尾
找出!結尾的行
grep –n ‘\!$’ regular_express.txt
找出空白行
grep –n ‘^$’ regular_express.txt
. 代表一定有任意一個字符
找出包括g??d的字符串
grep –n ‘g..d’ regular_express.txt
\ 轉義字符,轉義特殊字符
找出小數點.結尾的行
grep –n ‘\.$’ regular_express.txt
* 重復0個到無窮多個的前一個字符
找出包含o、oo、ooo、oooo...的行
grep –n ‘oo*’ regular_express.txt
找出g開頭和g結尾的所有行,當中任意字符
grep –n ‘g*g’ regular_express.txt 錯誤
grep –n ‘g.*g’ regular_express.txt 正確
找出包含任意數字的行
grep –n ‘[:digit:][:digit:]*’ regular_express.txt
[list] RE字符集合裏面的任意一個字符
找到a或d開頭的任意行
grep –n ‘^[ad]’ regular_express.txt
[n1-n2] 當前語系下RE字符集合的字符範圍裏面的任意一個字符
找到a或b或c或d開頭的任意行
grep –n ‘^[a-d]’ regular_express.txt
[^list] 非RE字符集合
找到不是a或d開頭的任意行
grep –n ‘^[^ad]’ regular_express.txt
註:b、c開頭的會被列出
[^n1-n2] 非當前語系下RE字符集合的字符範圍裏面的任意一個字符
找到不是a或b或c或d開頭的任意行
grep –n ‘^[^a-d]’ regular_express.txt
\{n\} 連續n個前一個RE字符
找到go...od(100個o)
grep –n ‘go\{100\}d’ regular_express.txt
\{n,m\} 連續n到m個前一個RE字符
找到go...od(2到5個o)
grep –n ‘go\{2,5\}d’ regular_express.txt
\{n,\} 連續n個以上前一個RE字符
找到go...od(5個o以上)
grep –n ‘go\{5,\}d’ regular_express.txt
擴展正則表達式的特殊字符
+ ? | () ()+
註:grep只支持基礎正則表達式,grep –E(寫作egrep)支持擴展正則表達式
+ 重復一個或一個以上的前一個RE字符
找到god、good、goo...od
egrep ‘go+d’ regular_express.txt
? 0個或1個前一個RE字符
找到gd、god
egrep ‘go?d’ regular_express.txt
| 用或的方式找出多個字符串(無規律)
找到glad、black、cache
egrep ‘glad|black|cache’ regular_express.txt
() 用組字符串找出多個字符串(有特定規律)
找到glad、good、geed
egrep ‘g(la|oo|ee)d’ regular_express.txt
()+ 找到有1個或多個重復組字符串
找到AxyzxyzxyzC
egrep ‘A(xyz)+C’ regular_express.txt
通配符和正則表達式的區別
通配符是系統命令使用,一般用來匹配文件名或者什麽的用在系統命令中;
正則表達式是操作字符串,以行為單位來匹配字符串使用的。
符號 |
通配符 |
正則表達式 |
* |
0個到任意多個字符 |
0個到任意多個前一個字符 |
? |
一定有一個任意字符 |
0個或1個前一個字符 |
通配符&正則表達式&特殊符號總結