正则介绍awk

author author     2022-10-25     790

关键词:

前面也提到了 awk 和 sed 一样是流式编辑器,它也是针对文档中的行来操作的,一行一行的去执行。awk 比 sed 更加强大,它能做到 sed 能做到的,同样也能做到 sed 不能做到的。awk 工具其实是很复杂的,有专门的书籍来介绍它的应用,不过我认为学那么复杂没有必要,只要能处理日常管理工作中的问题即可。

技术分享图片

同样的,做一下准备工作,见下图,
技术分享图片
先操作 awk 最简单的功能,指定分隔符 -F ,来查看一下文件 test.txt 的内容,见下图,
技术分享图片
接着指定分隔符为“:”,输出第一列,见下图,
技术分享图片
上图的操作命令,也不会更改文件的内容,跟 sed 一样。既然可以输出第一列,也可以输出指定的列或是全部输出,输出第三列,见下图,
技术分享图片
输出全部的列,用 $0 表示,见下图,
技术分享图片
全部输出还有一个简单的命令,不用指定分隔符,不用 -F,见下图,
技术分享图片

来试着操作一下,不指定分隔符的情况,先创建一个测试的文件 1.txt ,输入 vim 1.txt ,回车,见下图,
技术分享图片
输入上图内容,保存后退出。接着往下操作,
技术分享图片
以上说明 awk 忽略 -F 的选项,也就是没有指定默认的分隔符,默认会以空格或是空白字符为分隔符去打印。想要多打印几列,就可以用“,”来显示。
技术分享图片
上图中的分隔符,除了空格,也可以使用 # ,要用双引号引起来 "#",见下图,
技术分享图片
假如需要分的段比较多的话,用以上操作就会非常麻烦,实际上还有一种方法,等会会说。
接着来说一下 awk 的匹配功能,见下图,
技术分享图片
上图第二个命令就是 awk 和 sed 、grep 不同的地方,可以分列匹配查找。awk 同样也支持正则表达式,见下图,
技术分享图片
上图命令使用了正则表达式 + 。awk 这边比 grep 和 sed 强大的地方是,使用到正则表达式的时候都不用加选项或是脱义字符。,可以直接写出命令并执行。
awk 也支持同时使用多个表达式,见下图,
技术分享图片
上图中,包含 root 和 user 的结果,并没有全部显示出 root 或 user,可以使用命令 grep -E 命令来验证结果。awk 命令也可以用上图 grep -E 的命令形式,结果是一样的,见下图,
技术分享图片
接着来看一下数学公式计算的用法,见下图,
技术分享图片
上图命令一定要写两个等号 == ,才能表示等于。写一个等号 = 的话就相当于赋值了。 花括号的内容不写的话,默认是全部输出。也可以使用 >= 大于等于号,验证结果之后也是没错的。如果在数值上面用“”双引号引起来的话,是什么结果呢?见下图,
技术分享图片
上图的命令,在数值上加了 " " 双引号,相当于 sort 命令不加 -n ,就是以 ASCII 码的排序方式来计算的,命令就会认为双引号里面的内容是字符串而不是数字。所以,命令里面的数字要用来计算的话,就不能加双引号。
还有不等于号,用 != 表示,见下图,
技术分享图片
上图命令中 /sbin/nologin 表示的是字符串,所以要用双引号。结果可以看到,显示出来的行里面,最后一段都没有 /sbin/nologin 。其中 != 这边没有使用空格,要注意。

除了上面使用数字进行比较之外,还可以列与列之间进行比较,见下图,
技术分享图片
还可以两个条件在一起使用,见下图,
技术分享图片
&& 表示并且的意思,注意上面数字使用的是双引号 “”,所以结果出现了 59 。
除了并且之外,还有或者,见下图,
技术分享图片
|| 表示或者,两个条件满足其中一个就可以。接着往下操作,
技术分享图片
~ 表示匹配包含。
OFS 内置变量,用来表示输出的分隔符,具体用法见下图,
技术分享图片
OFS 需要用 花括号括起来,并且用在单引号 ‘ ‘ 命令的最前面,接着才是条件和 print 语句。 不写中间的条件的话,就是全部,见下图,
技术分享图片
条件里面还可以写入逻辑语句,见下图,
技术分享图片
定义输出的分隔符和输出的内容中间,就是条件,中间的条件和后面的 print 可以一起写,用花括号 整个括起来。表示 if $3>1000 ,就输出 1、3、7 列。下面这条命令的写法,就是省略掉了 if ,if 去掉可以去掉很多符号。但是加上 if 之后,比较好理解。
下面再介绍两个内置的变量,除了OFS,还有 NR 和 NF 。NR 表示行,NF 表示列。接着举例子,见下图,
技术分享图片
结果显示出来,相当于 grep -n 的作用,显示行号。NF 就是显示列号,见下图,
技术分享图片
结果全部是 7 列。
现在不妨改一下文件 test.txt 的内容,输入 vi test.txt ,回车,见下图,
技术分享图片
将第一行的内容,删除一列,保存后退出,接着往下操作,
技术分享图片
可以看到第一行的列数变为 6 了。
NR 和 NF 还可以作为判断的条件, 具体用法见下图,
技术分享图片
上图第一条命令显示的结果是前十行。第二条命令显示还可以两个条件一起用。
接着看下面这个例子,:冒号需要用双引号 ""引起来,
技术分享图片
因为 NR 一共只有 7 列,所有结果显示的行,就前面7行有前半部分,
技术分享图片
对于上图命令的理解,用这么一段话解释:
awk 是按行处理文件的,每一行都有awk内置变量:NF,NR
NF:是按给定的分隔符,分出来总的段数, 所有$NF,指最后一段。
NR:是当前行的行号。$NR,表示 第N行的第N段。
老师的示例中,每行有7段,所以,前面7行,第一列,分别显示当前行的段。如第一行显示第一段,第二行显示 第二段,第三行显示 第三段。。。。

以上说明,加上$和不加$,是不一样的。
接着来看一个和 == 两个等号相对应的功能,见下图,
技术分享图片
可以看到,第一条命令的 = 等号就是赋值,前三行的第一列都变成 root 了。第二条命令的 == 两个等号才是等于的意思。第一条命令的结果没有分隔符,可以输入变量 OFS 来定义分隔符,见第三条命令。
接着再往下操作,见下图,
技术分享图片
这边的 tot 是求和的意思, tot=tot+$3 意思是,新的tot的值,为旧的tot的值和$3的值的和。这个 tot 的值之前并不存在,所以默认是 0 ,从 0 开始求和,每一行的第3列相加。相加完成之后,就输出 tot 的值。
这里的END要注意一下,表示所有的行都已经执行,这是awk特有的语法。其实awk连同sed都可以写成一个脚本文件,而且有他们特有的语法,在awk中使用 if 判断、for 循环都是可以的,只是日常管理工作中没有必要使用那么复杂的语句而已。

总结:
-F 指定分隔符
$0 全部输出
两个等号 == ,才能表示等于
数值上加了 " " 双引号,输出结果就是以 ASCII 码的排序方式来计算
!= 表示不等于
&& 表示并且
|| 表示或者
OFS 内置变量,用来表示输出的分隔符
内置变量 NR 表示行,NF 表示列

正则介绍sed

grep工具的功能其实还不够强大,grep实现的只是查找功能,而它却不能实现把查找的内容替换掉。以前用vim的时候,可以查找也可以替换,但是只局限于在文本内部来操作,而不能输出到屏幕上。sed工具以及后面要讲的awk工具就... 查看详情

shell脚本——awk详细介绍(包含应用案例)(代码片段)

...k工作原理awk语法汇总示例内部变量格式化输出模式(正则表达)和动作概念字符串比较数值比较目的关系运算符算术运算多条件运算awk脚本编程变量条件判断循环数组awk编程案例awk概述awk是一种编程语言,用于在linux... 查看详情

awk从入门到入土正则匹配(代码片段)

awk的pattern除了使用简单的条件表达式之外,还可以用正则表达式。AWK可以方便高效地处理正则表达式。大量复杂的任务都可以由极其简单的正则表达式来解决。每一个精通命令行的人都知道正则表达式真正的威力所在。这一... 查看详情

awk(代码片段)

...文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk有很多内建的功能,比如数组、函数等,这是它和C语言的相... 查看详情

正则表达式:awk

一、awk简介简介:awk是一个强大的文本分析工具,相对于grep的过滤,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。相比于sed常常作用于一整行的     处理,awk则比较倾向于将一行分为数个“字... 查看详情

awk-模式匹配

使用awk作为文本处理工具,正则表达式是少不了的。要掌握这个工具的正则表达式使用。其实,我们不必单独去学习它的正则表达式。正则表达式就像一门程序语言,有自己语法规则已经表示意思。对于不同工具,其实大部分表... 查看详情

正则表达式中awk使用方法

awk命令的基本格式awk[options]‘program‘fileoptions这个表示一些可选的参数选项,反正就是你爱用不用,不用可以拉到。。。program这个表示awk的可执行脚本代码,这个是必须要有的。file这个表示awk需要处理的文件,注意是纯文本文... 查看详情

如何使用 awk 打印匹配的正则表达式模式?

】如何使用awk打印匹配的正则表达式模式?【英文标题】:Howtoprintmatchedregexpatternusingawk?【发布时间】:2011-07-2900:08:20【问题描述】:使用awk,我需要在文件中找到与正则表达式模式匹配的单词。我只想打印与模式匹配的单词。... 查看详情

awk 和 WinGrep 中的正则表达式

】awk和WinGrep中的正则表达式【英文标题】:RegExinawkandWinGrep【发布时间】:2010-09-2103:45:14【问题描述】:所以我正在寻找这样的模式:大小=\'0x0\'在日志文件中,但我只对大尺寸(4位或更多)感兴趣。以下正则表达式在EditPadPro... 查看详情

awk使用正则精确匹配

[[email protected]home]#catfile5001][YRSD5-1][YRSD5-1-2][0203008400028411]0101025001][YRSD7-1][YRSD7-1-2][0203008400028411]0101025001][YRSD5-1][YRSD5-1-20][14030084000286E7]0101015001][YRSD7-1][Y 查看详情

awk介绍和基本用法

AWK介绍:       awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切... 查看详情

awk的介绍学习(代码片段)

第一节、awk的工作流程和基本用法1.awk介绍awk是一种报表生成器,就是对文件进行格式化处理的,这里的格式化不是文件系统的格式化,而是对文件内容进行各种“排版”,进而格式化显示。在linux之上我们使用的是GNUawk简称gawk... 查看详情

awk用法记录(代码片段)

...隔符是空格-v定义变量并赋值command部分:'范围说明或正则表达式或者awk命令语句1;awk命令语句2;...''BEGINEND'行处理前行处理行处理后1、范围说明部分可以是BEGIN、END、逻辑表达式或者为空2、awk命令语句间用分号间隔3... 查看详情

将变量传递给 awk 并在正则表达式中使用它

】将变量传递给awk并在正则表达式中使用它【英文标题】:Passingvariabletoawkandusingthatinaregularexpression【发布时间】:2011-01-1417:11:21【问题描述】:我正在学习awk,但我无法将变量传递给脚本并将其用作正则表达式搜索模式的一部... 查看详情

awk在正则表达式中的使用

awk在正则表达式中的使用1.1ifconfig+sed定位+cut切割1.1.1取出网卡地址定位ifconfigeth0|grep"inetaddr"方法五:ifconfigeth0|awk‘NR==2‘|cut-d""-f12|cut-d":"-f210.0.0.2001.2tr命令tr  精简版的,阉割版的sed命令1对1的替换 通过输入重定向(&l... 查看详情

awk结合正则匹配

利用awk分析data.csv中label列各取值的分布.在终端执行headdata.csv查看数据:1name,business,label,label_name2沧州光松房屋拆迁有限公司,旧房拆迁、改造;物业服务(依法须经批准的项目,经相关部门批准后方可开展经营活动),E4,建筑装饰... 查看详情

如何 grep/perl/awk 重叠正则表达式

】如何grep/perl/awk重叠正则表达式【英文标题】:Howtogrep/perl/awkoverlappingregex【发布时间】:2021-11-2606:15:58【问题描述】:尝试将字符串通过管道传输到grep/perl正则表达式中以提取重叠匹配项。目前,结果似乎只提取了没有任何“... 查看详情

十七.正则以及grep,sed,awk的简单应用

一.正则表达式://grep,sed,awk都能解释正则表达式正则表达式:把一些特殊符号组合到一起描述字符和字符串的方法。^以什么开头grep‘^root‘/etc/passwd$以什么结尾如能登入系统的所有用grep‘bash$’/etc/passwd.任意一个字符grep‘^b.n... 查看详情