linux基础学习-18.5-awk进阶

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正则表达式匹配一行中的某一列

猜你喜欢

转载自www.cnblogs.com/Klanti/p/9143682.html