linux正则表达式awk详解

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

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

1、截取文档中的某个段

[root@yonglinux ~]# head -n2 passwd |awk -F: '{print $1}'

root

bin

[root@yonglinux ~]# head -n2 passwd |awk -F: '{print $0}'

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

[root@yonglinux ~]# head -n2 passwd |awk -F: '{print $1,$3,$7}'

root 0 /bin/bash

bin 1 /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 -5

0 0

1 1

2 2

3 4

4 7

[root@localhost ~]# awk -F: '{print $3":"$4}' 1.txt |head -5

0:0

1:1

2:2

3:4

4:7

[root@localhost ~]# awk -F: 'OFS="#"{print $3,$4}' 1.txt |head -5

0#0

1#1

2#2

3#4

4#7

[root@yonglinux ~]# head -n2 passwd |awk -F: '{print $1"#""@"$3"#"$7}'

root#@0#/bin/bash

bin#@1#/sbin/nologin

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

2、匹配字符或字符串

[root@yonglinux ~]# awk -F: '$1~/me/' passwd

games:x:12:100:games:/usr/games:/sbin/nologin

[root@yonglinux ~]# awk -F: '$1~/user/' passwd

user1:x:600:501::/home/user1:/bin/bash

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

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

root 0

operator 11

ftp 14

saslauth 499

user1 600

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

3、条件操作符

判断第3个字段为0的

[

root@yonglinux ~]# awk -F: '$3=="0"' passwd

root:x:0:0:root:/root:/bin/bash

[root@yonglinux ~]# awk -F: '$3==10' passwd

uucp: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"' passwd

user1:x:600:501::/home/user1:/bin/bash

awk中是可以用逻辑符号判断的,比如 ‘==' 就是等于,也可以理解为 ‘精确匹配' 另外也有 >, ‘>=, ‘

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

[root@yonglinux ~]# awk -F: '$3>"500"' passwd | sort -t: -k 3 -n

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

halt:x:7:0:halt:/sbin:/sbin/halt

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin

sshd:x:74:74:privilege-separated ssh:/var/empty/sshd:/sbin/nologin

dbus:x:81:81:system message bus:/:/sbin/nologin

postfix:x:89:89::/var/spool/postfix:/sbin/nologin

nobody:x:99:99:nobody:/:/sbin/nologin

user1:x:600:501::/home/user1:/bin/bash

[root@yonglinux ~]# awk -F: '$3>500' passwd | sort -t: -k 3 -n

user1:x:600:501::/home/user1:/bin/bash

[root@yonglinux ~]# awk -F: '$3>'500'' passwd | sort -t: -k 3 -n

user1:x:600:501::/home/user1:/bin/bash

!= 为不匹配,第7字段不等于/sbin/nologin的行,需要用双引号括起来。

[root@yonglinux ~]# awk -F: '$7!="/sbin/nologin"' passwd

root:x:0:0:root:/root:/bin/bash

sync:x:5:0:sync:/sbin:/bin/sync

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

halt:x:7:0:halt:/sbin:/sbin/halt

user1:x:600:501::/home/user1:/bin/bash

mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash

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

示例,加双引号之后把数字当字符看;

[root@yonglinux ~]# awk -F: '$3>"5" && $3

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin

user1:x:600:501::/home/user1:/bin/bash

示例,加单引号之后为数字比较;

[root@yong ~]# awk -F: '$3>'5' && $3

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

另外还可以使用 && “并且”和  || “或者” 的意思。

示例,打印第3段大于第4段,并且第7段为/bin/bash的行;

[root@yonglinux ~]# awk -F: '$3>$4 && $7=="/bin/bash"' passwd

user1:x:600:501::/home/user1:/bin/bash

示例,打印第3段小于第4段,或者第7段为/bin/bash的行;

[root@yonglinux ~]# awk -F: '$3

root:x:0:0:root:/root:/bin/bash

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

games:x:12:100:games:/usr/games:/sbin/nologin

gopher:x:13:30:gopher:/var/gopher:/sbin/nologin

ftp:x:14:50:ftp user:/var/ftp:/sbin/nologin

user1:x:600:501::/home/user1:/bin/bash

mysql:x:27:27:mysql server:/var/lib/mysql:/bin/bash

4、awk的内置变量awk常用的变量有:

NF :用分隔符分隔后一共有多少段

NR :行数

{print NR":"NF}    列出行号,以冒号分隔,列出共有多少段;

[root@yonglinux ~]# head -5 passwd |awk -F: '{print NR":"NF}'

1:7

2:7

3:7

4:7

5:7

[root@yonglinux ~]# head -5 passwd |awk -F: '{print NF}'

7

7

7

7

7

[root@yonglinux ~]# head -5 passwd |awk -F: '{print NR}'

1

2

3

4

5

[root@yonglinux ~]# head -5 passwd |awk -F: '{print $NF}'

/bin/bash

/sbin/nologin

/sbin/nologin

/sbin/nologin

/sbin/nologin

NF 表示是多少段,而$NF是最后一段的值, 而NR则是行号。

5、awk中的数学运算awk还可以对各个段的值进行数学运算:

[root@yonglinux ~]# awk -F: '{(tot=tot+$3)};END {print tot};' passwd

1720

这里的END要注意一下,表示所有的行都已经执行,这是awk特有的语法,其实awk连同sed都可以写成一个脚本文件,而且有他们特有的语法,在awk中使用if判断、for循环都是可以的。

示例,if判断,如第一段的值为root,打印整行;

[root@yonglinux ~]# awk -F: '{if ($1=="root") print $0}' passwd

root:x:0:0:root:/root:/bin/bash

示例,for循环,定义sum变量,i值为第3段的值;求第3段的和;

[root@yonglinux ~]# sum=0;for i in `awk -F: '{print $3}' passwd`;do sum=$[($sum+$i)];done;echo $sum

1720

以上就是关于linux正则表达式awk的全部内容,希望对大家的学习有所帮助。相关阅读:

win8.1小键盘数字锁定怎么在登录画面默认开启教程

css如何去掉点击a链接带来的虚框

Win10 Mobile手机版10.0.10134多图曝光:细节调整很多

JS获取农历日期具体实例

解析C#面向对象编程中方法(method)的使用

C#调用VB进行简繁转换的方法

解读ASP.NET 5 & MVC6系列教程(5):Configuration配置信息管理

JavaScript动态创建form表单并提交的实现方法

Android中的windowSoftInputMode属性详解

jquery限定文本框只能输入数字即整数和小数

iOS应用开发中StoryBoard搭建UI界面的基本使用讲解

JavaScript–Apple设备检测示例代码

Win10正式上市:Win7/Win8.1同步免费升级

详解java定时任务

php 字符流在linux,PHP_linux正则表达式awk详解,awk和sed一样是流式编辑器,它 - phpStudy...相关推荐

  1. Linux三剑客之awk详解

    第一篇 awk简介与表达式实例 一种名字怪异的语言 模式扫描和处理,处理数据和生成报告. awk不仅仅是linux系统中的一个命令,而且是一种编程语言:它可以用来处理数据和生成报告(excel):处理 ...

  2. linux ps命令使用详解

    PS是LINUX下最常用的也是非常强大的进程查看命令 1. ps简介 前面介绍的两个命令都是用于查看当前系统用户的情况,下面就来看看进程的情况,这也是本章的主题. 要对进程进行监测和控制,首先必须要了 ...

  3. linux语言的说明顺序有哪些,(linux常用头文件详解.doc

    (linux常用头文件详解 linux常用头文件详解 POSIX标准定义的头文件??????? 目录项 ???????? 文件控制 ??? 文件名匹配类型 ??? 路径名模式匹配类型 ??????? ...

  4. linux命令行使用ppt,linux命令行系统详解.ppt

    linux命令行系统详解.ppt (161页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 29.9 积分 第2章 命令与示例 1为什么要学习命令?命令对于 ...

  5. linux dd命令使用详解

    linux dd命令使用详解 dd 的主要选项: 指定数字的地方若以下列字符结尾乘以相应的数字: b=512, c=1, k=1024, w=2, xm=number m if=file 输入文件名, ...

  6. 《Linux设备驱动开发详解 A》一一2.3 接口与总线

    本节书摘来华章计算机出版社<Linux设备驱动开发详解 A>一书中的第2章,第2.3节,作者:宋宝华 更多章节内容可以访问云栖社区"华章计算机"公众号查看.1 2.3 ...

  7. java 自定义正则表达式_java中正则表达式实例详解

    Java中正则表达式运用实例(参看java中正则表达式运用详解): 测试代码 package test; /** * 在String的matches()方法,split()方法中使用正则表达式. * ...

  8. linux下dd命令详解

    linux下dd命令详解    名称: dd 使用权限: 所有使用者dd 这个指令在 manual 里的定义是 convert and copy a file 使用方式: dd [option] 如果 ...

  9. php 正则表达式 环视,php正则表达式环视详解

    php正则表达式环视详解 1. 顺序肯定环视(?=exp) 零宽度正预测先行断言,又称顺序肯定环视,断言自身出现位置的后面能匹配表达式exp. 比如,匹配以"ing"结尾的单词前面 ...

最新文章

  1. 了解机器学习的八大专业术语
  2. 回文java_回文 Java
  3. ble gatt核心结构
  4. Ble Connection Events(转载)
  5. 使命召唤 战区:战术竞技新思路,卷入RPG元素的激烈战斗
  6. virtio 网络的演化:原始virtio > vhost-net(内核态) > vhost-user(DPDK) > vDPA
  7. break和continue的区别和执行过程
  8. golang学习笔记14 golang substring 截取字符串
  9. 脚本重启项目-定时启动
  10. 大数据学习入门规划?
  11. 【Java类的封装性】封装的日期类。Person类,使用对象作为成员变量并实现深拷贝。(利用了类的封装性)
  12. 概要设计的过程和任务
  13. web前端网页制作 小组作业(制作一个简单的小网页)
  14. pymol 分离蛋白与小分子保存;pymol分离蛋白多聚体亚基;pymol对接位点交互图展示;去除杂原子
  15. I2C协议---I2C时序图解析
  16. python多线程爬取妹子图
  17. 关于JavaScript的模块(CommonJS, AMD, CMD, ES6模块)的理解
  18. Git 彻底删除大文件
  19. Axure 9 收录不同效果的制作过程
  20. 这些软件测试面试真题你见过吗?

热门文章

  1. 成为程序员后你都明白了什么?
  2. 【非参】python实现Nadaraya-Waston估计
  3. 数据库,计算机网络、操作系统刷题笔记17
  4. mysqli 预处理详解
  5. js中的基本数据类型有哪些?
  6. 开发手机客户端旅游、机票、酒店等系统
  7. Activiti技术流程的启动与终止
  8. MySQL登录密码忘记怎么办
  9. Java毕业设计-白酒销售网站
  10. 治疗慢性胃炎的方法措施!