linux正则表达式awk讲解

awk和sed一样是流式编辑器,它也是针对文档中的行来操作的,一行一行的去执行。awk比sed更加强大,它能做到sed能做到的,同样也能做到sed不能做到的。awk常用来分段;

awk不用加任何参数就可以实现 + ? * . | 这些特殊符号;

1、截取文档中的某个段

[root@yonglinux~]#head-n2passwd|awk-F:'{print$1}’rootbin[root@yonglinux~]#head-n2passwd|awk-F:'{print$0}’root:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologin[root@yonglinux~]#head-n2passwd|awk-F:'{print$1,$3,$7}’root0/bin/bashbin1/sbin/nologin

-F 选项的作用是指定分隔符,如果不加-F指定,则以空格或者tab为分隔符。 Print为打印的动作,用来打印出某个字段。$1为第一个字段,$2为第二个字段,依次类推,有一个特殊的那就是$0,它表示整行。

{ }内可以打印多个字段$1,$3,$7 打印第1、3、7段,中间用逗号隔开;

打印分段默认分隔符为空格,可以自定义分隔符,分隔符需要用双引号括起来;也可以OFS定义输出分隔符;

[root@localhost~]#awk-F:'{print$3,$4}’1.txt|head-50011223447[root@localhost~]#awk-F:'{print$3″:”$4}’1.txt|head-50:01:12:23:44:7[root@localhost~]#awk-F:’OFS=”#”{print$3,$4}’1.txt|head-50#01#12#23#44#7

[root@yonglinux~]#head-n2passwd|awk-F:'{print$1″#””@”$3″#”$7}’root#@0#/bin/bashbin#@1#/sbin/nologin

注意awk的格式,-F后紧跟单引号,然后里面为分隔符,print的动作要用 { } 括起来,否则会报错。print还可以打印自定义的内容,但是自定义的内容要用“”双引号括起来。

2、匹配字符或字符串

[root@yonglinux~]#awk-F:’$1~/me/’passwdgames:x:12:100:games:/usr/games:/sbin/nologin[root@yonglinux~]#awk-F:’$1~/user/’passwduser1:x:600:501::/home/user1:/bin/bash

可以让某个段去匹配,~ 表示匹配的意思,以冒号分隔第一字段然后匹配//里的关键字;

[root@yonglinux~]#awk-F:’/root/{print$1,$3}/user/{print$1,$3}’passwdroot0operator11ftp14saslauth499user1600

awk还可以多次匹配,如上例全文匹配包含root关键词的行,再匹配包含user的行,打印所匹配的第1、3段。

3、条件操作符

判断第3个字段为0的

[root@yonglinux~]#awk-F:’$3==”0″‘passwdroot:x:0:0:root:/root:/bin/bash[root@yonglinux~]#awk-F:’$3==10’passwduucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

判断第3个字段为10的并且打印该行的第7字段;

[root@yonglinux~]#awk-F:’$3==10{print$7}’passwd/sbin/nologin[root@yonglinux~]#awk-F:’$3==”600″‘passwduser1:x:600:501::/home/user1:/bin/bash

awk中是可以用逻辑符号判断的,比如 ‘==’ 就是等于,也可以理解为 ‘精确匹配’ 另外也有 >, ‘>=, ‘<, ‘<=, ‘!= 等等,值得注意的是,在和数字比较时,若把比较的数字用双引号引起来后,那么awk不会认为是数字,而认为是字符,不加双引号则认为是数字。

示例,双引号括起来认为是字符;加单引号和不加则认为是数字;

[root@yonglinux~]#awk-F:’$3>”500″‘passwd|sort-t:-k3-nshutdown:x:6:0:shutdown:/sbin:/sbin/shutdownhalt:x:7:0:halt:/sbin:/sbin/haltmail:x:8:12:mail:/var/spool/mail:/sbin/nologinvcsa:x:69:69:virtualconsolememoryowner:/dev:/sbin/nologinsshd:x:74:74:privilege-separatedssh:/var/empty/sshd:/sbin/nologindbus:x:81:81:systemmessagebus:/:/sbin/nologinpostfix:x:89:89::/var/spool/postfix:/sbin/nologinnobody:x:99:99:nobody:/:/sbin/nologinuser1:x:600:501::/home/user1:/bin/bash[root@yonglinux~]#awk-F:’$3>500’passwd|sort-t:-k3-nuser1:x:600:501::/home/user1:/bin/bash[root@yonglinux~]#awk-F:’$3>’500”passwd|sort-t:-k3-nuser1:x:600:501::/home/user1:/bin/bash

[root@yonglinux~]#awk-F:’$7!=”/sbin/nologin”‘passwdroot:x:0:0:root:/root:/bin/bashsync:x:5:0:sync:/sbin:/bin/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdownhalt:x:7:0:halt:/sbin:/sbin/haltuser1:x:600:501::/home/user1:/bin/bashmysql:x:27:27:MySQLServer:/var/lib/mysql:/bin/bash

除了针对某一个段的字符进行逻辑比较外,还可以两个段之间进行逻辑比较。

吃东西,随便是什么——都可以。当日出越过山涧,我未老,你依然。

linux正则表达式awk讲解

相关文章:

你感兴趣的文章:

标签云: