awk 6.0 — awk模式之二

awk的语法

awk [options] ‘Pattern {Actions}’ file1,file2…

之前介绍了三种模式:空模式,关系运算模式,BEGIN/END模式

正则模式

模式可以理解成条件,正则模式就是满足正则表达式条件的,就执行相应的动作,否则不执行。
如果我们想要找到在/etc/passwd文件中,以“_krb”开头的内容该如何找呢

grep "^_krb" /etc/passwd

同样的,我们想要使用awk的方式完成这个操作,

awk '/^_krb/{print $0}' /etc/passwd

比较一下上面两种方式,grep将正则表达式放在了双引号中,awk将正则表达式放在了两个反斜杠中。

上面示例看上去是grep更加的简介,但是有一些具体的case的时候,awk显得更加美观。awk有格式化输出的功能。请读者尝试着读下面的使用方式:
image

注意点:1. 如果在awk的正则中使用了/,这个时候就需要使用转义字符,假如下面的需求,我们想要从passwd文件中,找到/bin/bash作为登陆shell的用户,

awk '\/bin\/bash$/{print $0} /etc/passwd'

注意点:2. 如果在正则中,需要使用形如{x,y}这种类型的表达式的时候,需要使用–posix,或者–re-interval选项

awk --posix '/he{2,3}y/{print $0} test'
行范围模式

假如有下面的文件(为了截图方便,我把文件和操作放在一起了)
image

文件中,hello出现了两次,world出现了一次,如果我想筛选出,hello第一次出现和world第一次出现中的所有行的内容,就使用上面的方式
总结一下就是,使用两个正则表达式,匹配所有的行,意思就是从第一个正则开始,到第二个正则结束匹配所有的行。

行范围模式另外一种方式,可以使用关系运算模式进行解决,比如打印3-6行的数据。

awk 'NR>=3 && NR<=6 {print $0}' test
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值