Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / AIX下AWK语言中使用正则表达式

在awk命令中使用正则表达式 
awk中可以使用正则表达式,元字符如下: 
,^,.,[],|,(),*,+,? 
+:匹配一个或多个字符 
?:匹配模式出现频率,/XY?Z/匹配XYZ,YZ 
 
条件操作符 
操作符               描述 
———————————   ——————————————— 
    <             小于 
    <=               小于等于 
    ==               等于 
    !=               不等于 
    >=               大于等于 
    ~                  匹配正则表达式 
    !~               不匹配正则表达式 
 
1.匹配 
grade.txt文件中,第四列的包含Brown的行: 
awk "{if($4~/Brown/) print $0}" grade.txt 
J.Troll    07/99  4842 Brown-3  12 26 26 
L.Tansley  05/99  4712 Brown-2  12 30 28 
只要包含Brown,就打印数据: 
awk "$0 ~ /Brown/" grade.txt 
J.Troll    07/99  4842 Brown-3  12 26 26 
L.Tansley  05/99  4712 Brown-2  12 30 28 
 
2.精确匹配 
打印第三列包含42的行: 
awk "{if($3~/42/) print $0}" grade.txt 
J.Troll    07/99  4842 Brown-3  12 26 26 
打印第三列包含48的行: 
awk "$3==48 {print $0}" grade.txt 
P.Bunny    02/99  48   Yello    12 35 28 
 
3.不匹配 
打印第三列不包含48的行: 
awk "$3!~48 {print $0}" grade.txt 
L.Tansley  05/99  4712 Brown-2  12 30 28 
查看所有的行: 
pg grade.txt 
M.Tansley  05/99  48311  Green    8    40 44 
J.Lulu   06/99  48317  green    9    24 26 
P.Bunny    02/99  48   Yello    12 35 28 
J.Troll    07/99  4842 Brown-3  12 26 26 
L.Tansley  05/99  4712 Brown-2  12 30 28 
打印不包含Brown的行: 
awk "$0 !~/Brown/" grade.txt 
M.Tansley  05/99  48311  Green    8    40 44 
J.Lulu   06/99  48317  green    9    24 26 
P.Bunny    02/99  48   Yello    12 35 28 
打印第四个域不包含"Brown-2"的行: 
awk "$4 != "Brown-2" {print $0}" grade.txt 
M.Tansley  05/99  48311  Green    8    40 44 
J.Lulu   06/99  48317  green    9    24 26 
P.Bunny    02/99  48   Yello    12 35 28 
J.Troll    07/99  4842 Brown-3  12 26 26 
 
4.大于 
awk "{if($6 > $7) print $1}" grade.txt 
P.Bunny 
L.Tansley 
 
5.小于 
awk "{if( $6 < $7 ) print $0}" grade.txt 
M.Tansley  05/99  48311  Green    8    40 44 
J.Lulu   06/99  48317  green    9    24 26 
 
6.大小写 
awk "/[Gg]reen/" grade.txt 
M.Tansley  05/99  48311  Green    8    40 44 
J.Lulu   06/99  48317  green    9    24 26 
 
7.任意字符 
行首第四个字符为a的行 
awk "$1 ~/^...a/" grade.txt 
M.Tansley  05/99  48311  Green    8    40 44 
L.Tansley  05/99  4712 Brown-2  12 30 28 
 
8.或关系匹配 
行中包含Yellow或者Brown: 
awk "$0 ~/(Yellow|Brown)/" grade.txt 
J.Troll    07/99  4842 Brown-3  12 26 26 
L.Tansley  05/99  4712 Brown-2  12 30 28 
行中包含G(g)reen: 
awk "$0 ~/(G|g)reen/" grade.txt 
M.Tansley  05/99  48311  Green    8    40 44 
J.Lulu   06/99  48317  green    9    24 26 
 
9.行首:^ 
 
10.&&  and 
awk "{if ($1=="P.Bunny" && $4=="Yello") print $0}" grade.txt 
P.Bunny    02/99  48   Yello    12 35 28 
 
11.||  or 
awk "{if ($4=="Yello" || $4~/Brown/) print $0}" grade.txt 
P.Bunny    02/99  48   Yello    12 35 28 
J.Troll    07/99  4842 Brown-3  12 26 26 
L.Tansley  05/99  4712 Brown-2  12 30 28 
 
12.! 
awk "$0 !~/2/" grade.txt 
M.Tansley  05/99  48311  Green    8    40 44