关于awk的范围模式功能问题

man awk中这样写到

The pattern1, pattern2 form of an expression is called a range pattern. It matches all input records starting with a record that matches pattern1, and continuing until a record that matches pattern2, inclusive. It does not combine with any other sort of pattern expression.

表达式的pattern1,pattern2形式称为范围模式。 它匹配所有输入记录,从与pattern1匹配的记录开始,并持续到与pattern2匹配的记录(包括)。 它不与任何其他类型的模式表达式组合。

[root@localhost ~]# awk '/aaa/,/bbb/{print}' file
aaa
grge
ddd
bbb
aaa gege
ccc
bbb
aaa gregeg
eee
bbb
这里的/bbb/并没有起作用,执行了从/aaa/一直匹配到最后一行

[root@localhost ~]# awk '/aaa/,/ccc/{print}' file
aaa
grge
ddd
bbb

aaa gege
ccc
aaa gregeg
eee
bbb
这里/ccc/并没有起作用,跟/bbb/一样,","起作用了,但/bbb/没有匹配到结果

按照awk的man文档说明,awk '/aaa/,/bbb/' file结果应该是
aaa
grge
ddd
bbb

可是这里的结果却是到最后一行,是不是/bbb/这个pattern并没有匹配到
[root@localhost ~]# seq 9 | awk /3/,/7/
3
4
5
6
7
当每行内容不同,awk的范围模式能正确执行
[root@localhost ~]# seq 10 | awk /1/,/7/
1
2
3
4
5
6
7
10
当有重复行时,范围模式会将重复结果显示

以上是我遇到的一些疑惑,询问了大神,得到下面的解释

# awk '/aaa/,/bbb/{print}' file
aaa
grge
ddd
bbb
aaa gege
ccc
bbb
aaa gregeg
eee
bbb

[root@localhost ~]# awk '/aaa/,/ccc/{print}' file
aaa
grge
ddd
bbb

aaa gege
ccc
aaa gregeg
eee
bbb

$ seq 20 | awk '/3/,/7/{print}'
3
4
5
6
7
13
14
15
16
17

$ seq 15 | awk '/3/,/7/{print}'
3
4
5
6
7
13
14
15

$ seq 15 | awk '/1/,/2/{print}'
1
2
10
11
12
13
14
15

$ seq 23 | awk '/1/,/2/{print}'
1
2
10
11
12
13
14
15
16
17
18
19
20
21

这里的最后一行匹配结果有点意外,在同一行里,有1,也有2,并且2在前面,但还是匹配到了;猜测awk在同一行使用范围匹配时不分顺序

总结一下,awk的范围模式其实很好用的,但有多行内容重复时,结果就要注意了,awk将进行全文匹配
还有就是awk的范围模式其实sed也有,但这两者有区别,awk的范围匹配能将同一行结果匹配,但sed不能匹配同一行的内容

最新文章

  1. C#程序使用SQLite数据库
  2. Win8+VMware12+CentOS7网络设置
  3. css计数器详解
  4. UVA 253 Cube painting
  5. enum 枚举的使用
  6. JavaScript 语句 数组与冒泡排序法
  7. HDU 4409 Family Name List --乱搞、LCA
  8. SharePoint表单和工作流 - Nintex篇(五)
  9. JavaEDU614 团队第三周项目总结
  10. Python脚本控制的WebDriver 常用操作 <十三> 处理button group层的定位
  11. 【JSONCpp】简介及demo
  12. Sql查询除ID以外相同的数据
  13. 安装完Apache和PHP之后访问PHP文件页面提示下载而没有解析 解决办法
  14. UIView 中 frame, bounds, center 属性的关系
  15. 老李推荐:第2章2节《MonkeyRunner源码剖析》了解你的测试对象: NotePad窗口Activity之NotesList简介
  16. Centos7中hadoop配置
  17. C# 一些学习作业
  18. ArcGIS案例学习笔记4_1_矢量校正
  19. kvm虚拟化一: 图形化的管理方式
  20. [Git] Change the commit message of my last commit

热门文章

  1. 【ASP.NET MVC系列】数据验证和注解
  2. 浅谈Android的广告欢迎界面(倒计时)
  3. HDFS中namenode启动失败
  4. android支付宝app支付(原生态)-包括android前端与java后台
  5. Java压测之四两拨千斤
  6. ASP.NET Core中使用IOC三部曲(三.采用替换后的Autofac来实现AOP拦截)
  7. js面向对象学习笔记(一):创建空对象,理解this指向
  8. bzoj:1230: [Usaco2008 Nov]lites 开关灯
  9. Replacement(思维题)
  10. Xtrabackup实现数据的备份与恢复