鍍金池/ 教程/ Linux/ 正則表達(dá)式
循環(huán)  
操作符  
優(yōu)雅地輸出
用戶自定義函數(shù)
正則表達(dá)式
基本示例
內(nèi)置函數(shù)
工作流程
概述
控制流  
數(shù)組  
輸出重定向
基本語法
運(yùn)行環(huán)境
內(nèi)置變量

正則表達(dá)式

AWK 可以方便高效地處理正則表達(dá)式。大量復(fù)雜的任務(wù)都可以由極其簡單的正則表達(dá)式來解決。每一個(gè)精通命令行的人都知道正則表達(dá)式真正的威力所在。

這一章將著重講解標(biāo)準(zhǔn)正則表達(dá)式的使用方法。

點(diǎn)(Dot)

點(diǎn)字符(.)可以匹配除了行結(jié)束字符的所有字符。比如下面的便子就可以匹配 fin, fun, fan 等等。

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

執(zhí)行上面命令可以得到如下結(jié)果:

fun
fin
fan

行開始

行開始符(^)匹配一行的開始。下面的示例將輸出所有以字符串 The 開始的行。

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

執(zhí)行上面的命令可以得到如下結(jié)果:

There
Their

行結(jié)束

行結(jié)束符($)匹配一行的結(jié)束。下面的例子中將輸出所有以字符 n 結(jié)束的行:

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

執(zhí)行上面的命令可以得到如下結(jié)果:

fun
fin
fan

匹配字符集

匹配字符集用于匹配集合(由方括號表示)中的一個(gè)字符。如下例子中,匹配 Call 與 Tall 而不會(huì)匹配 Ball。

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

執(zhí)行上面的命令可以得到如下結(jié)果:

fun
fin
fan

排除集

正則匹配時(shí)會(huì)排除集合中的字符。如下例子中只會(huì)輸出 Ball。

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

執(zhí)行上面的命令可以得到如下結(jié)果:

Ball

豎線(|)允許正則表達(dá)式實(shí)現(xiàn)邏輯或運(yùn)算. 下面例子將會(huì)輸出 Ball 與 Call 。

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

執(zhí)行上面的命令可以得到如下結(jié)果:

Call
Ball

最多出現(xiàn)一次

該符號( ?)前面的字符不出現(xiàn)或者出現(xiàn)一次。如下示例匹配 Colour 與 Color。 使用 ? 使得 u 變成了可選字符 。

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

執(zhí)行上面的命令可以得到如下結(jié)果:

Colour
Color

出現(xiàn)零次或多次

該符號(*) 允許其前的字符出現(xiàn)多次或者不出現(xiàn)。如下示例將匹配 ca,cat, catt 等等。

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

執(zhí)行上面的命令可以得到如下結(jié)果:

ca
cat
catt

出現(xiàn)一次或多次

該符號(+)使得其前的字符出現(xiàn)一次或者多次。下面的例子會(huì)匹配一個(gè) 2 或者多個(gè)連續(xù)的 2。

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

執(zhí)行上面的命令可以得到如下結(jié)果:

22
123
234
222

分組

括號用于分組而字符 | 用于提供多種選擇。如下的正則表達(dá)式會(huì)匹配所有包含 Apple Juice 或 Aplle Cake 的行。

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

執(zhí)行上面的命令可以得到如下結(jié)果:

Apple Juice
Apple Cake