awk匹配模式
正则表达式
匹配记录(整行)
匹配 /etc/passwd 文件中以 root 开头的
$ awk '/^root/' /etc/passwd
root:x:0:0:root:/root:/bin/bash
$ awk '$0 ~/^root/' /etc/passwd
root:x:0:0:root:/root:/bin/bash
匹配字段 匹配操作符(~|!~)
匹配 /etc/passwd 文件中第一列以 root 开头的
$ awk '$1~/^root/' /etc/passwd
root:x:0:0:root:/root:/bin/bash
匹配 /etc/passwd 文件中最后一列不是以 bash 结尾的
$ awk '$NF !~ /bash$/' /etc/passwd|head -5
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
^ 和 ~ 用法示例
说明
^ 在awk中表示以 ... 开头的列,在 sed 、grep 中表示以 ... 开头的行
^ 用法示例
文件 t.txt 内容如下
1 101,hehe,CEO
2 102,haha,CTO
3 103,xixi,COO
4 105,yy,CFO
5 106,xx,CIO
6 110,jjxx,COCO
示例:打印文件中以1开头的行
$ awk '/^1/{print}' t.txt
1 101,hehe,CEO
~ 用法示例
文件 t1.txt 内容如下
zhang san 1234567
li si 6666666
wang wu 6666667
zhao liu 67676798
hao qi 11112222
zhu ba 00000001
显示所有ID号码最后一位是2或7的人的全名
$ awk '$3~/[27]$/{print $1,$2}' t1.txt
zhang san
wang wu
hao qi
显示文件中第三列以1开头的行
$ awk '$3~/^1/{print}' t1.txt
zhang san 1234567
hao qi 11112222
显示zhang的姓氏和ID号码
$ awk '$1~/zhang/{print $1,$3}' t1.txt
zhang 1234567
条件表达式
关系运算符
| 运算符 | 含义 |
|---|---|
< | 小于 |
<= | 小于等于 |
== | 等于 |
!= |