免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3358 | 回复: 10
打印 上一主题 下一主题

[系统管理] awk的模式问题,请大牛指点 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-06-26 23:55 |只看该作者 |倒序浏览
本帖最后由 村里来的Linuxer 于 2016-09-20 22:40 编辑

文件a有如下内容
1,2,3,4,5,6
7,8,9
10,11,12,13
22
hehe
1234
请解释以下命令的具体含义
① awk '/2/1{print}' a
1,2,3,4,5,6
7,8,9
10,11,12,13
22
hehe
1234
②awk '/2/,/2/0' a
1,2,3,4,5,6
10,11,12,13
22
1234
③awk '/2/,/2/1' a
1,2,3,4,5,6
10,11,12,13
22
1234
④awk '/2/,0' a
1,2,3,4,5,6
7,8,9
10,11,12,13
22
hehe
1234
⑤awk '/2/,1' a
1,2,3,4,5,6
10,11,12,13
22
1234
⑥awk '/2/,/2/' a
1,2,3,4,5,6
10,11,12,13
22
1234

论坛徽章:
60
20周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之北京
日期:2016-07-06 15:42:0715-16赛季CBA联赛之同曦
日期:2016-06-12 10:38:0915-16赛季CBA联赛之佛山
日期:2016-05-27 11:54:56黄金圣斗士
日期:2015-12-02 11:44:35白银圣斗士
日期:2015-11-25 14:32:43白银圣斗士
日期:2015-11-23 12:53:352015亚冠之布里斯班狮吼
日期:2015-10-21 16:55:482015亚冠之首尔
日期:2015-09-01 16:46:052015亚冠之德黑兰石油
日期:2015-08-31 11:39:192015亚冠之萨济拖拉机
日期:2015-08-28 21:06:5315-16赛季CBA联赛之广东
日期:2016-07-12 14:58:53
2 [报告]
发表于 2016-06-27 11:59 |只看该作者
可以参考看看我之前发的贴:

http://bbs.chinaunix.net/thread-4246512-1-1.html

论坛徽章:
60
20周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之北京
日期:2016-07-06 15:42:0715-16赛季CBA联赛之同曦
日期:2016-06-12 10:38:0915-16赛季CBA联赛之佛山
日期:2016-05-27 11:54:56黄金圣斗士
日期:2015-12-02 11:44:35白银圣斗士
日期:2015-11-25 14:32:43白银圣斗士
日期:2015-11-23 12:53:352015亚冠之布里斯班狮吼
日期:2015-10-21 16:55:482015亚冠之首尔
日期:2015-09-01 16:46:052015亚冠之德黑兰石油
日期:2015-08-31 11:39:192015亚冠之萨济拖拉机
日期:2015-08-28 21:06:5315-16赛季CBA联赛之广东
日期:2016-07-12 14:58:53
3 [报告]
发表于 2016-06-27 12:15 |只看该作者
本帖最后由 reyleon 于 2016-06-28 11:15 编辑



@blackold @关阴月飞 讨论与测试, 哥又涨姿势了, , 之前的编辑删了, 感觉全是错的

结论就是: 正则表达式匹配结果与任何东西做字符串连接操作, 结果永远为真.

①awk '/2/1{print}' a   
pattern 为: /2/1, 正则表达式匹配结果返回布尔值, 要么真(True), 要么假(False), 结果与1结合, 是做的字符串连接操作, 所以pattern结果是字符串, 非空的字符串pattern为真, pattern永远为真.


②awk '/2/,/2/0' a  第一个pattern匹配成功时为真, 第二个pattern永远为真.
③awk '/2/,/2/1' a  第一个pattern匹配成功时为真, 第二个pattern永远为真.
④awk '/2/,0' a  第一个pattern匹配成功时为真, 第二个pattern为数字0, 永远为假.
⑤awk '/2/,1' a 第一个pattern匹配成功时为真, 第二个pattern为数字1, 永远为真.
⑥awk '/2/,/2/' a  第一个pattern匹配成功时为真, 第二个pattern匹配成功时为真.


而模式范围匹配操作流程时:

if pattren1 is True:
  turned = "on" # 首先以pattern1匹配记录, 为真时, 将开关打开.

if turned == "on":  
   执行action # 然后逻辑内部再检测开关状态, 如果开关为打开状态, 就执行后面的动作

if pattren2 is True:
  turned == "off" #再以pattern2匹配记录, 为真时,将开关关闭





评分

参与人数 2可用积分 +10 信誉积分 +5 收起 理由
520harrison + 5 赞一个!
Shell_HAT + 10 赞一个!

查看全部评分

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
4 [报告]
发表于 2016-06-27 18:53 |只看该作者
回复 1# 村里来的Linuxer


    这个问题有意思。真没注意过。

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
5 [报告]
发表于 2016-06-27 18:53 |只看该作者
回复 3# reyleon


    学习了。

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
6 [报告]
发表于 2016-06-27 19:03 |只看该作者
本帖最后由 blackold 于 2016-06-28 10:39 编辑

百度不了,只能 XXOO 了一番


之前的理解错了, 无论是作为独立的 pattern, 还是作为 range pattern 中的 pattern, 表达式 /pattern/0 (常量正则表达式进行字符串连接操作), 结果总当作字符串解释,永真。

  1. $ echo foo|awk '/1/'

  2. $ echo foo|awk '/1/""'
  3. foo

  4. $ echo foo|awk '/1/0'
  5. foo

复制代码
也许不同的版本的 awk 有不同的解释,就当作 XXOO 吧。

多谢 @关阴月飞 指正!

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
7 [报告]
发表于 2016-06-27 19:41 |只看该作者
回复 1# 村里来的Linuxer

>>...给个说法

别乱用...(哪学的?)
   

论坛徽章:
0
8 [报告]
发表于 2016-06-28 12:54 |只看该作者
回复 3# reyleon

牛,学习了

   

论坛徽章:
0
9 [报告]
发表于 2016-06-28 13:09 |只看该作者
牛,学习了,求工作
回复 3# reyleon


   

论坛徽章:
3
15-16赛季CBA联赛之北控
日期:2016-06-06 21:01:08程序设计版块每日发帖之星
日期:2016-06-19 06:20:00程序设计版块每日发帖之星
日期:2016-07-17 06:20:00
10 [报告]
发表于 2016-06-30 20:35 |只看该作者
流弊,学习了,求工作!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP