1、awk模式与动作
接下来就详细介绍下,awk的模式都有几种:
- 正则表达式作为模式
- 比较表达式作为模式
- 范围模式
- 特殊模式BEGIN和END
awk的模式是你玩好awk的必备也是最基础的内容,必须熟练掌握
2、正则表达式作为模式
awk同sed一样也可以通过模式匹配来对输入的文本进行匹配处理。说到模式匹配,肯定少不了正则表达式,awk也支持大量的正则表达式模式,大部分与sed支持的元字符类似,而且正则表达式是玩转三剑客的必备工具,下表列出了awk支持的正则表达式元字符:
awk默认就支持的元字符:
awk默认不支持的元字符:(参数--posix)
提示:
- 加括号代表整体匹配,不加那么就匹配前边的一个字符。awk默认不支持这种形式的正则,需要加--posix参数或者--re-interval
- 正则表达式的运用,默认是在行内查找匹配的字符串,若有匹配则执行action操作,但是有时候仅需要固定的列来匹配指定的正则表达式,比如:我想取/etc/passwd文件中第五列{$5}这一列查找匹配mail字符串的行,这样就需要用另外两个匹配操作符,并且awk里面只有这两个操作符来匹配正则表达式。
1)awk正则匹配操作符
awk正则匹配操作符:
||用于对记录或区域的表达式进行匹配||用于表达与~相反的意思|
|--|--|
|!
下面还是通过具体示例来看看,awk如何来通过正则表达式匹配字符串的
2)awk正则表达式匹配整行
[root@oldboy files]# awk -F ":" '/^root/' awkfile.txt
root:x:0:0:root:/root:/bin/bash
和下面的效果是一样的
[root@oldboy files]# awk -F ":" '$0~/^root/' awkfile.txt
root:x:0:0:root:/root:/bin/bash
提示:
awk只用正则表达式的时候是默认匹配整行的即‘$0~/^root/’和‘/^root/’是一样的
3)awk正则表达式匹配一行中的某一列
[root@oldboy files]# awk -F ":" '$5~/shutdown/' awkfile.txt
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
提示:
- $5表示第五个区域(列)
- ~表示匹配(正则表达式匹配)
- /shutdown/表示匹配shutdown这个字符串
合并在一起
$5~/shutdown/表示第五个区域(列)匹配正则表达式/shutdown/,既第5列包含shutdown这个字符串,则显示这一行。
4)某个区域中的开头和结尾
知道了如何使用正则表达式匹配操作符之后,我们来看看awk正则与grep和sed不同的地方。
awk正则表达式
|^|匹配一个字符串的开头|
|--|--|
|$|匹配一个字符串的结尾|
在sed和grep这两个命令中,我们都把它们当作行的开头和结尾。但是在awk中他表示的是字符串的开头和结尾。
练习题:
1、写出awk默认就支持的元字符
2、awk正则表达式匹配一行中的某一列