AWK - 正則表示式



AWK 在處理正則表示式方面非常強大且高效。許多複雜的任務可以透過簡單的正則表示式來解決。任何命令列專家都知道正則表示式的強大功能。

本章將介紹標準正則表示式並提供相應的示例。

它匹配任何單個字元,但換行符除外。例如,以下示例匹配fin、fun、fan等。

示例

[jerry]$ echo -e "cat\nbat\nfun\nfin\nfan" | awk '/f.n/'

執行上述程式碼後,您將獲得以下結果:

輸出

fun
fin
fan

行首

它匹配行首。例如,以下示例列印所有以模式The開頭的行。

示例

[jerry]$ echo -e "This\nThat\nThere\nTheir\nthese" | awk '/^The/'

執行此程式碼後,您將獲得以下結果:

輸出

There
Their

行尾

它匹配行尾。例如,以下示例列印以字母n結尾的行。

示例

[jerry]$ echo -e "knife\nknow\nfun\nfin\nfan\nnine" | awk '/n$/'

輸出

執行此程式碼後,您將獲得以下結果:

fun
fin
fan

字元集匹配

它用於匹配多個字元中的一個。例如,以下示例匹配模式CallTall,但不匹配Ball

示例

[jerry]$ echo -e "Call\nTall\nBall" | awk '/[CT]all/'

輸出

執行此程式碼後,您將獲得以下結果:

Call
Tall

排除集

在排除集中,脫字元號(^)否定方括號中字元集。例如,以下示例僅列印Ball

示例

[jerry]$ echo -e "Call\nTall\nBall" | awk '/[^CT]all/'

執行此程式碼後,您將獲得以下結果:

輸出

Ball

替換

豎線(|)允許正則表示式進行邏輯或運算。例如,以下示例列印BallCall

示例

[jerry]$ echo -e "Call\nTall\nBall\nSmall\nShall" | awk '/Call|Ball/'

執行此程式碼後,您將獲得以下結果:

輸出

Call
Ball

零次或一次出現

它匹配前一個字元的零次或一次出現。例如,以下示例匹配Colour以及Color。我們使用?u設為可選字元。

示例

[jerry]$ echo -e "Colour\nColor" | awk '/Colou?r/'

執行此程式碼後,您將獲得以下結果:

輸出

Colour
Color

零次或多次出現

它匹配前一個字元的零次或多次出現。例如,以下示例匹配ca、cat、catt等。

示例

[jerry]$ echo -e "ca\ncat\ncatt" | awk '/cat*/'

執行此程式碼後,您將獲得以下結果:

輸出

ca
cat
catt

一次或多次出現

它匹配前一個字元的一次或多次出現。例如,以下示例匹配2的一次或多次出現。

示例

[jerry]$ echo -e "111\n22\n123\n234\n456\n222"  | awk '/2+/'

執行上述程式碼後,您將獲得以下結果:

輸出

22
123
234
222

分組

圓括號 ()用於分組,字元|用於備選。例如,以下正則表示式匹配包含Apple JuiceApple Cake的行。

示例

[jerry]$ echo -e "Apple Juice\nApple Pie\nApple Tart\nApple Cake" | awk 
   '/Apple (Juice|Cake)/'

執行此程式碼後,您將獲得以下結果:

輸出

Apple Juice
Apple Cake
廣告