千家信息网

linux正则表达式awk的详细介绍

发表于:2025-12-04 作者:千家信息网编辑
千家信息网最后更新 2025年12月04日,这篇文章主要讲解了"linux正则表达式awk的详细介绍",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"linux正则表达式awk的详细介绍"吧!awk
千家信息网最后更新 2025年12月04日linux正则表达式awk的详细介绍

这篇文章主要讲解了"linux正则表达式awk的详细介绍",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"linux正则表达式awk的详细介绍"吧!

awk和sed一样是流式编辑器,它也是针对文档中的行来操作的,一行一行的去执行。awk比sed更加强大,它能做到sed能做到的,同样也能做到sed不能做到的。awk常用来分段;
awk不用加任何参数就可以实现 + ? * . | 这些特殊符号;

1、截取文档中的某个段

[root@yonglinux ~]# head -n2 passwd |awk -F: '{print $1}'rootbin[root@yonglinux ~]# head -n2 passwd |awk -F: '{print $0}'root:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologin[root@yonglinux ~]# head -n2 passwd |awk -F: '{print $1,$3,$7}'root 0 /bin/bashbin 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 -50 01 12 23 44 7[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 -n2 passwd |awk -F: '{print $1"#""@"$3"#"$7}'root#@0#/bin/bashbin#@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 0operator 11ftp 14saslauth 499user1 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中是可以用逻辑符号判断的,比如 '==' 就是等于,也可以理解为 '精确匹配' 另外也有 >, '>=, '<, '<=, '!= 等等,值得注意的是,在和数字比较时,若把比较的数字用双引号引起来后,那么awk不会认为是数字,而认为是字符,不加双引号则认为是数字。

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

[root@yonglinux ~]# awk -F: '$3>"500"' passwd | sort -t: -k 3 -n shutdown: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:virtual console memory owner:/dev:/sbin/nologinsshd:x:74:74:privilege-separated ssh:/var/empty/sshd:/sbin/nologindbus:x:81:81:system message bus:/:/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: -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/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:MySQL Server:/var/lib/mysql:/bin/bash

除了针对某一个段的字符进行逻辑比较外,还可以两个段之间进行逻辑比较。
示例,加双引号之后把数字当字符看;

[root@yonglinux ~]# awk -F: '$3>"5" && $3<"7"' passwd shutdown:x:6:0:shutdown:/sbin:/sbin/shutdownvcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologinuser1:x:600:501::/home/user1:/bin/bash

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

[root@yong ~]# awk -F: '$3>'5' && $3<'7' {print }' passwdshutdown: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<$4 || $7=="/bin/bash"' passwd root:x:0:0:root:/root:/bin/bashadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinmail:x:8:12:mail:/var/spool/mail:/sbin/nologinuucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologingames:x:12:100:games:/usr/games:/sbin/nologingopher:x:13:30:gopher:/var/gopher:/sbin/nologinftp:x:14:50:ftp user:/var/ftp:/sbin/nologinuser1:x:600:501::/home/user1:/bin/bashmysql: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:72:73:74:75:7[root@yonglinux ~]# head -5 passwd |awk -F: '{print NF}'77777[root@yonglinux ~]# head -5 passwd |awk -F: '{print NR}'12345[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 $sum1720

感谢各位的阅读,以上就是"linux正则表达式awk的详细介绍"的内容了,经过本文的学习后,相信大家对linux正则表达式awk的详细介绍这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

引号 字段 分隔符 数字 示例 字符 正则 表达式 内容 变量 就是 逻辑 学习 特殊 一行 关键 冒号 动作 意思 数学 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 青浦区企业数据库销售诚信服务 db2数据库查看lv的大小 战地5开服务器要几个人 闻泰科技工业互联网 数据库名字密码类型 软件开发对学历要求高吗 抹掉设备时候服务器出错 我的世界服务器刷钱软件 网络安全工程师教材推荐 消费电子工厂生产管理软件开发 做视频需要什么服务器 怎么用数据库挂单页 i39100 软件开发够吗 数据库咋算年龄 工商局企业数据库 烟台二牛网络技术注册资本 大专计算机网络技术学c语言吗 南京软件开发项目管理培训 合肥建设银行软件开发部门 web服务器安全性的建议 计算机网络技术华为数据通信 服务器上怎么显示地址 乐学帮网络技术有限公司怎么样 在别人的服务器里玩跑酷 农安什么是网络技术服务至上 服务器硬盘怎么改成日常使用 数据库语音类型 wifi服务器亮红灯怎么办 外场设施建设网络安全风险 树索引数据库原理
0