bash通配符和正則表達(dá)式元字符部分歸納
Linux中有各種各樣的字符,而且在不同環(huán)境和不同命令之下含義也不同
作為新手,決定先歸納學(xué)到的符號(hào),方便后面學(xué)習(xí)厘清它們之間的關(guān)系。
glob 簡(jiǎn)化了的正則表達(dá)式
bash默認(rèn)通配符:
? :只匹配一個(gè)任意字符;
* :匹配零個(gè)或多個(gè)任意字符;
[^] :方括號(hào)及其中^中的取反
[abc]:匹配任何一個(gè)列在方括號(hào)中的字符(這個(gè)例子要么匹配一個(gè) a,要么匹配一個(gè) b,要么匹配一個(gè) c);
如果在方括號(hào)中使用短劃線分隔兩個(gè)字符,表示所有在這兩個(gè)字符范圍內(nèi)的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的數(shù)字)。
grep基本正則表達(dá)式元字符:
.: 匹配任意單個(gè)字符;
[]: 匹配指定范圍內(nèi)的任意單個(gè)字符
[^]:匹配指定范圍外的任意單個(gè)字符
*:匹配前面的字符任意次;
.*:任意長(zhǎng)度的任意字符;
\?:匹配其前面的字符0或1次;即前面的可有可無(wú);
\+:匹配其前面的字符至少1次;
\{m\}:匹配前面的字符m次;
\{m,n\}:匹配前面的字符至少m次,至多n次;
\{0,n\}:匹配前面的字符至多n次;
\{m,\}:匹配前面的字符至少m次;
^:行首錨定;用于模式的最左側(cè);
$:行尾錨定;用于模式的最右側(cè);
\< 或 \b:詞首錨定;用于單詞模式的左側(cè);
\> 或 \b:詞尾錨定;用于單詞模式的右側(cè);
\<PATTERN\>:匹配整個(gè)單詞;
\(\):將一個(gè)或多個(gè)字符捆綁在一起,當(dāng)作一個(gè)整體進(jìn)行處理;
egrep及擴(kuò)展的正則表達(dá)式
egrep = grep -E
擴(kuò)展正則表達(dá)式的元字符:
字符匹配:
.
[]
[^]
*
?: 0或1次;
+:1次或多次;
{m}:匹配m次;
{m,n}:至少m,至多n次;
^
$
\<, \b
\>, \b
()
后向引用:\1, \2, ...
根據(jù)以上歸納,需要區(qū)分的符號(hào)
glob和grep的*符號(hào),前者直接任意字符,后者匹配前一個(gè)字符任意次數(shù)
grep和egrep的?,+,{m,n},(),前者需要將這些字符轉(zhuǎn)義,后者不需要
附其它一些bash符號(hào)說(shuō)明
子字符類
[:alpha:]
匹配當(dāng)前歸類中的大寫和小寫字母字符。例如,'[0-9]{3}[[:alpha:]]{2}' 匹配三個(gè)數(shù)字,后跟兩個(gè)字母。
[:alnum:]
匹配當(dāng)前歸類中的數(shù)字、大寫和小寫字母字符。例如,'[[:alnum:]]+' 匹配含有一個(gè)或多個(gè)字母和數(shù)字的字符串。
[:digit:]
匹配當(dāng)前歸類中的數(shù)字。例如,'[[:digit:]-]+' 匹配含有一個(gè)或多個(gè)數(shù)字或橫線的字符串。同樣,'[^[:digit:]-]+' 匹配含有一個(gè)或多個(gè)不是數(shù)字或橫線的字符的字符串。
[:lower:]
匹配當(dāng)前歸類中的小寫字母字符。例如,'[[:lower:]]' 不匹配 A,因?yàn)?A 為大寫。
[:space:]
匹配單個(gè)空格 (' ')。
[:upper:]
匹配當(dāng)前歸類中的大寫字母字符。例如,'[[:upper:]ab]' 與以下其中一項(xiàng)匹配:任何大寫字母、a 或 b。
[:whitespace:]
匹配一個(gè)空白字符,例如,空格、制表符、換頁(yè)符和回車符。
[:ascii:]
匹配任何七位的 ASCII 字符(0 到 127 之間的順序值)。
[:blank:]
匹配一個(gè)空白區(qū)或水平制表符。
[[:blank:]] 等效于 [ \t]。
[:cntrl:]
匹配順序值小于 32 或字符值為 127 的 ASCII 字符(控制字符)??刂谱址〒Q行符、換頁(yè)符、退格符,等等。
[:graph:]
匹配打印字符。
[[:graph:]] 等效于 [[:alnum:][:punct:]]。
[:print:]
匹配打印字符和空格。
[[:print:]] 等效于 [[:graph:][:whitespace:]]。
[:punct:]
匹配其中一個(gè)字符: !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~.
[:punct:] 子字符類不能包括當(dāng)前歸類中可用的非 ASCII 標(biāo)點(diǎn)字符。
[:word:]
匹配當(dāng)前歸類中的字母、數(shù)字或下劃線字符。
[[:word:]] 等效于 [[:alnum:]_]。
[:xdigit:]
匹配字符類 [0-9A-Fa-f] 中的字符。
# 注釋說(shuō)明
$ 變量符號(hào)
\ 轉(zhuǎn)義字符 一般用在寫很長(zhǎng)的通配符上 我們可以把特殊字符或者通配符 轉(zhuǎn)義成一般的字符
; 連續(xù)命令執(zhí)行分割符號(hào),例子 cp /etc /tmp ;ls /tmp ;cd etc ;rm etc
'' 反點(diǎn)號(hào)中間的先執(zhí)行
/ 目錄符號(hào),路徑分割
& 把作業(yè)放到后臺(tái)去執(zhí)行
~ 用戶的主文件夾
!邏輯運(yùn)算上的非