通配符、正則表達式使用場合:
通配符:一般是用於命令行腳本等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次。 \{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。
()().*() :其中\1表示第一個()內容,\2表示第二個()內容,以此類推....
a\|b :表示a或b。 a|b :表示a或b; \(C\|c\)at :表示Cat或cat。 (C|c)at :表示Cat或cat;