关于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. 匿名对象 构造方法 重载 构造代码块 this 关键字
  2. IOS开发基础知识--碎片28
  3. 【Alpha阶段】第十次Scrum例会
  4. [HDU5015]233 Matrix
  5. meta标签的用法
  6. css3 translate属性
  7. iOS 开发之重力动画效果
  8. ZooKeeper(3.4.5) - 原生 API 的简单示例
  9. anthelion编译
  10. python之字典常用语法
  11. var dataObj=eval("("+data+")");//转换为json对象(解决在ajax返回json格式数据的时候明明正确的获取了返回值但是却就是进不去success方法的问题。格式错误)
  12. 理解WebKit和Chromium: 硬件加速之RenderLayer树到合成树
  13. Android For JNI(六)——交叉编译,NDK概述以及文件结构,编写自己的第一个JNI工程
  14. EffictiveC++笔记 第3章
  15. Mysql查询报错:Illegal mix of collations (gbk_chinese_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='
  16. visual studio 2017下载地址
  17. asyncio Queue的使用例子
  18. 微信小程序-flex布局中align-items和align-self区别
  19. Centos 7 快速搭建IOS可用IPsec
  20. Hadoop Single Node Setup(hadoop本地模式和伪分布式模式安装-官方文档翻译 2.7.3)

热门文章

  1. php 抽象类和接口类
  2. CentOS7卸载自带jdk安装自己的JDK1.8
  3. vb代码之------画一个半透明矩形
  4. Hadoop日志以及日志的格式和命名组成
  5. hihocoder-1079题解(线段树+离散化)
  6. linux(五)之vi编译器
  7. POJ 3662 Telephone Lines【Dijkstra最短路+二分求解】
  8. BZOJ3916: [Baltic2014]friends
  9. A. Vasya and Football
  10. 解决CSS垂直居中的几种方法(基于绝对定位,基于视口单位,Flexbox方法)