1. 程式人生 > >awk 使用正則表示式

awk 使用正則表示式

awk 使用正則表示式

1. 正則表示式

2. awk命令

3. 在awk中使用正則表示式

3.1 實戰案例1
[[email protected] temp]# echo "Abaidu.comB" | awk '/^A.*?B/'{print}
Abaidu.comB

這裡解釋一下這個正則表示式。
^A.*?B 指的是:以A 字元開頭; .* 指的是任意字元可以出現任意次;? 表示之前的字串必須匹配一到多次;B表示必須包含這個字元 B

3.2 實戰案例2
[[email protected] temp]# echo "sdfAbaidu.comB" | awk '/^s.*?B$/'{print}
sdfAbaidu.comB

這裡新添的知識點有:B$是以字元B結尾的字串。

3.3 實戰案例3
[[email protected] temp]# awk '/in?/' data1.txt 
2 winxp 4000
4 linux 1000
[[email protected] temp]# cat data1.txt 
1 mac 2000
2 winxp 4000
3 bsd 1000
4 linux 1000

這裡的in?表示的是包含in字串的行。

3.4 實戰案例4
[[email protected] temp]# awk '/m(a)*(ab)?c/' data1.txt 
1 mac 2000 5 maaaabc 200 [[email protected] temp]# cat data1.txt 1 mac 2000 2 winxp 4000 3 bsd 1000 4 linux 1000 5 maaaabc 200

這裡的正則表示式含義是:(a)*指的是可以匹配0或多次a(ab)? 指的是(ab) 必須匹配0或1次。

3.5 實戰案例5
[[email protected] temp]# awk '/a{1}/' data1.txt 
1 mac 2000
5 maaaabc 200

a{1}指的就是字元a必須匹配1次。

如果說要是想在匹配成功之後,執行別的操作,如下:

[[email protected] temp]# awk '/a.c/''{print "ok"}' data1.txt 
ok

這裡的操作就是,如果有匹配a.c,那麼輸出ok,否則什麼也不做。上述的命令可以簡化成如下的樣子:

[[email protected] temp]# awk '/a.c/{print "ok"}' data1.txt 
ok

如果能夠匹配數字,則輸出ok。

[[email protected] temp]# awk '/[0-9]/{print "ok"}' data1.txt 
ok
ok
ok
ok
ok

可以看到這裡匹配了很多的ok。 是因為每匹配成功一次,就會輸出一個ok