awk的使用语法
awk[options] 'Pattern{Action}' file1,file2
对于options(选项)而言,我们使用过-F,也使用过-v
对于Action(动作)而言,我们使用过print和printf。
对于Pattern(模式)而言,我们在刚开始学习awk时,学习了BEGIN和END模式。
模式可以理解为条件。awk是逐行处理文本的,awk会先处理完当前行,再处理下一行。如果不指定任何条件,awk会依次处理所有行,如果指定了”条件“,只有满足”条件“的行才会被处理,不满足”条件“的行就不会被处理。
上述”模式“中,使用到了关系表达式(关系操作符)。当经过关系运算得出的结果为”真“时,则满足条件(表示与指定的模式匹配),满足条件就会执行相应动作。
1.正则模式
正则模式可以理解为:把”正则表达式“当作”条件“,能与正则匹配的行,就算满足条件,满足条件的行才会执行对应的动作,不能匹配到的行则不会执行对应的动作。
语法:
grep ”正则表达式“ /etc/passwd
awk ‘/正则表达式/{print $0}’ /etc/passwd
注意:在使用正则模式时,如果正则中包含”/“,则需要进行转义。grep不需要对”/“进行转义。grep需要对”\“转义,并且需要用单引号。
此外,还需注意:
1.当awk命令中使用正则模式时候,使用到的正则用法属于”扩展正则表达式“
2.当使用{x,y}这种次数匹配的正则表达式时,需要配合--posix选项或者--re-interval选项。(我实际测试的时候,不需要--posix也成功了)
2.行范围模式
如上图所示,文件中lee和kevin都出现两次,如果想要输出从lee第一次出现的行到kevin第一次出现的行,可以使用行范围模式。如下所示:
三类模式:
1.空模式
2.关系运算模式
3.BEGIN/END模式
4.正则模式与行范围模式