1. 程式人生 > 其它 >Linux常用萬用字元及正則表示式

Linux常用萬用字元及正則表示式

萬用字元、正則表示式使用場合:

萬用字元:一般是用於命令列指令碼等bash環境(df、cut、sort、uniq、tr等)

linux正則表示式:常用於三劍客場景(grep、awk、sed)


萬用字元

常見萬用字元

*       - 代表所有(0到多個)字元      
?       - 代表任意一個字元
[0-9] - 匹配0-9之間的單個數字
[abc] - 匹配這三個字元中的任意一個字元
;       - 兩個命令之間的分隔符
#       - 在配置檔案裡,註釋效果
|       - 管道檔案
~       - 當前使用者的家目錄
-       - 上一次的所在目錄
$       
- 變數前需要加的符號 / - 路徑分隔符,也是根 >或1> - 輸出重定向,覆蓋原有資料 >> - 追加輸出重定向,追加在檔案內容的尾部 < - 輸入重定向(xargs,tr) << - 追加輸入重定向(cat) ' - 單引號,不具備變數置換功能,引號內所見即所得 " - 雙引號,具備變數置換功能,解析變數後輸出,不加引號相當於雙引號 ` - 反引號,兩個``中間為命令,會先執行,等價$() {} - 中間為命令去、區塊組合或內容系列 [] - 中間為字元組合 ()
- 在中間為子shell的起始與結束 ! - 邏輯運算中的“非”(not) && - and並且,當前一個指令執行成功時,執行後一個指令 || - or或者,當前一個指令執行失敗時,執行後一個指令 .. - 代表上級目錄 . - 代表當前目錄

正則表示式

分類:基本正則表示式BRE;擴充套件正則表示式ERE(需要grep -E,sed -r,awk好像沒擴充套件正則) 元字元分類:字元匹配、匹配次數、位置錨定、分組。 匹配次數
基礎正則:
    *    :匹配前面的字元任意次,最少一次。且是貪婪模式,儘可能的長匹配。
    .
* :匹配任意長度的字元。 \? :匹配其前面的字元0次或1次。 \+ :匹配其前面的字元最少1次。 \w :匹配字母、數字、下劃線。 \d :匹配數字。 \s :匹配任意的空白符。 \{4\} :匹配前面的字元4次。 \{m,n\} :匹配前面的字元最少m次,最多n次。 擴充套件正則: * :匹配前面一個字元任意次。 ? : 匹配其前面的一個字元0次或1次。 + :匹配其前面的一個字元最少1次。 {8} :匹配前面的一個字元8次。 {m,n} :匹配前面的一個字元最少m次,最多n次。 練習: 1\{4\} - 表示匹配字元 "1" 重複4次 1\{5,\} - 表示匹配字元 "1" 重複4次或4次以上 a\{,8\} - 表示匹配字元 "a" 重複8次或8次以內 d1\{3,5\} - 表示匹配字元 "1" 重複3-5次

字元匹配

基礎正則表示式:
. :匹配任意單個字元。 [] :匹配指定範圍內的任意單個字元。 [
-] :表示匹配"[-]"裡一段字元的任意單個字元,如[0-9]即0到9。 [^] :匹配指定範圍外的任意單個字元。 [[:alnum:]] :匹配字元和數字。 [[:alpha:]] :匹配a-z,A-Z。 [[:lower:]] :匹配小寫字母。 [[:upper:]] :匹配大寫字母。 [[:blank:]] :匹配空白字元(即空格和製表符)。 [[:digit:]] :匹配十進位制數字。 [[:xdigit:]] :匹配十六進位制數字。

位置錨定(定位出現的位置)

基礎正則表示式:
    ^    :行首錨定,用於模式最左側。
    $    :行尾錨定,用於模式最右側。
    ^PATTERN$    :用於匹配整行。
    ^$    :匹配空白行。
    ^[[:space:]]$    :匹配空白行。
    \<或\b    :詞首錨定,用於單詞最左側。
    \>或\b    :詞尾錨定,用於單詞最右側。

練習:
 \<PATTERN\>    :匹配單詞"PATTERN"。
\bPATTERN\b  :匹配單詞"PATTERN"。
# cat test.sh |grep "\blook\b" ,# cat test.sh |grep "\<look\>"  :匹配包含"look"單詞的行。

分組(一般sed用的多,用於文字替換)

基礎正則表示式
    \(\)    :將一個或多個字元捆綁在一起,當做一個整體進行處理。
    \n    : 表示從左側起第n個括號以及與之匹配右括號之間的模式所匹配到的字元。
    \|    :表示或

擴充套件正則表示式:
    ()    :將一個或多個字元捆綁在一起,當做一個整體進行處理。
    |    : 表示或
  
練習:
   基礎 \(string\+\(string2\)*\)    :其中\1代表string\+(string2\)*,\2代表string2。
   擴充套件 (string+(string2)*)    :其中\1代表string+(string2)*,\2代表string2。
    a\|b    :表示a或b。
    a|b    :表示a或b;
     \(C\|c\)at    :表示Cat或cat。
     (C|c)at    :表示Cat或cat;