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