免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 5519 | 回复: 26

[文本处理] awk中的匹配区间问题 [复制链接]

论坛徽章:
2
摩羯座
日期:2014-11-03 15:28:56卯兔
日期:2015-01-04 17:20:51
发表于 2014-09-25 10:48 |显示全部楼层
本帖最后由 bulletmarquis 于 2014-09-25 11:02 编辑

awk和sed同样都支持/rega/,/regb/的匹配方式
今天无聊做试验
  1. seq 30|awk '/1/,/3/'
  2. seq 30|sed -n '/1/,/3/p'
复制代码
这两个结果是一样的,我也能理解

但是取反的时候我就不懂了
  1. seq 30|awk '/1/,!/3/'
  2. 1
  3. 10
  4. 11
  5. 12
  6. 13
  7. 14
  8. 15
  9. 16
  10. 17
  11. 18
  12. 19
  13. 21
复制代码
这个结果是怎么得出来的?求大神指点一下

同理还有
  1. seq 30|awk '!/1/,!/3/'
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 20
  11. 22
  12. 23
  13. 24
  14. 25
  15. 26
  16. 27
  17. 28
  18. 29
  19. 30
复制代码

论坛徽章:
2
摩羯座
日期:2014-11-03 15:28:56卯兔
日期:2015-01-04 17:20:51
发表于 2014-09-25 10:58 |显示全部楼层
  1. seq 30|awk '!/1/,/3/'
复制代码
已经理解了

论坛徽章:
6
羊年新春福章
日期:2015-03-03 17:16:28双子座
日期:2015-03-03 17:16:56巳蛇
日期:2015-03-03 17:17:2415-16赛季CBA联赛之福建
日期:2016-03-11 09:05:00黑曼巴
日期:2016-07-07 16:58:1215-16赛季CBA联赛之吉林
日期:2016-11-14 09:23:07
发表于 2014-09-25 11:03 |显示全部楼层
本帖最后由 jcdiy0601 于 2014-09-25 11:05 编辑

测试了下
----------------------------------------------------------
  1. [root@localhost ~]# seq 3|awk '!/1/,/2/'
  2. 2
  3. 3
  4. [root@localhost ~]# seq 3|awk '!/1/,/3/'
  5. 2
  6. 3
复制代码
这种情况好像就是匹配非1
-----------------------------------------------------------
  1. [root@localhost ~]# seq 3|awk '/1/,!/3/'
  2. 1
  3. [root@localhost ~]# seq 3|awk '/1/,!/2/'
  4. 1
复制代码
这种情况好像就是匹配1
-----------------------------------------------------------
看测试结果,前面加了!之后,号后面的匹配就没效果了

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
发表于 2014-09-25 11:06 |显示全部楼层
回复 1# bulletmarquis


那2个是不一样的:
  1. $ cat file
  2. 13
  3. 2
  4. 3
  5. 4
  6. 5
  7. $ awk '/1/,/3/' file
  8. 13
  9. $ sed -n '/1/,/3/p' file
  10. 13
  11. 2
  12. 3
复制代码

论坛徽章:
2
摩羯座
日期:2014-11-03 15:28:56卯兔
日期:2015-01-04 17:20:51
发表于 2014-09-25 11:07 |显示全部楼层
回复 3# jcdiy0601


    应该不是这样,可以测试
  1. seq 30|awk '!/1/,/3/'
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 20
  15. 21
  16. 22
  17. 23
  18. 24
  19. 25
  20. 26
  21. 27
  22. 28
  23. 29
  24. 30
复制代码

论坛徽章:
2
摩羯座
日期:2014-11-03 15:28:56卯兔
日期:2015-01-04 17:20:51
发表于 2014-09-25 11:08 |显示全部楼层
回复 4# ly5066113


    呃,是否是说sed里面,regB一定是从regA的下一行开始判断,而awk里面,regB是从regA的当前行就开始判断?

论坛徽章:
6
羊年新春福章
日期:2015-03-03 17:16:28双子座
日期:2015-03-03 17:16:56巳蛇
日期:2015-03-03 17:17:2415-16赛季CBA联赛之福建
日期:2016-03-11 09:05:00黑曼巴
日期:2016-07-07 16:58:1215-16赛季CBA联赛之吉林
日期:2016-11-14 09:23:07
发表于 2014-09-25 11:09 |显示全部楼层
回复 5# bulletmarquis


    你看你这个匹配的结果,匹配了!/1/   但是,号后面的/3/并没生效

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
发表于 2014-09-25 11:10 |显示全部楼层
回复 6# bulletmarquis


是的。

论坛徽章:
2
摩羯座
日期:2014-11-03 15:28:56卯兔
日期:2015-01-04 17:20:51
发表于 2014-09-25 11:12 |显示全部楼层
回复 8# ly5066113


确实,试验了一下
  1. cat abc
  2. 23
  3. 45
  4. 2
  5. 3
  6. 4
  7. 5
复制代码
  1. cat abc|awk '/2/,/3/'
  2. 23
  3. 2
  4. 3
复制代码
谢谢指点,这下能理解seq 30|awk '/1/,!/3/'结果为啥会有1那行了

论坛徽章:
6
羊年新春福章
日期:2015-03-03 17:16:28双子座
日期:2015-03-03 17:16:56巳蛇
日期:2015-03-03 17:17:2415-16赛季CBA联赛之福建
日期:2016-03-11 09:05:00黑曼巴
日期:2016-07-07 16:58:1215-16赛季CBA联赛之吉林
日期:2016-11-14 09:23:07
发表于 2014-09-25 11:14 |显示全部楼层
回复 1# bulletmarquis
  1. [root@localhost ~]# seq 20|awk '!/1/,/3/'
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 20
  15. [root@localhost ~]# seq 20|awk '/1/,/3/'
  16. 1
  17. 2
  18. 3
  19. 10
  20. 11
  21. 12
  22. 13
  23. 14
  24. 15
  25. 16
  26. 17
  27. 18
  28. 19
  29. 20
复制代码
可这又怎么解释呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP