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次。
    \{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;

 

 
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM