免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2105 | 回复: 8
打印 上一主题 下一主题

grep -z选项,怎么解释如下结果? [复制链接]

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-02-25 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-07-12 16:08 |只看该作者 |倒序浏览
本帖最后由 xiaoshichao143 于 2012-07-12 17:56 编辑
  1. printf 'a b\nc d\n\n\n\n\n\000\n\000e\000\000\nf' | grep -cz .
  2. printf 'a b\nc d\n\n\n\n\n\000\n\000e\000\000\nf' | grep -cz '$'
  3. printf 'a b\nc d\n\n\n\n\n\000\n\000e\000\000\nf' | grep -cz '^'
  4. printf 'a b\nc d\n\n\n\n\n\000\n\000e\000\000\nf' | grep -c '$'
复制代码
求指教

论坛徽章:
0
2 [报告]
发表于 2012-07-13 09:28 |只看该作者
逐步了解一下
-c
-z
选项及
.
$
^
这些正则的意义
再综合下你就能明白

论坛徽章:
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
3 [报告]
发表于 2012-07-13 09:31 |只看该作者
回复 1# xiaoshichao143


    结果在哪?

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-02-25 06:20:00
4 [报告]
发表于 2012-07-13 09:58 |只看该作者
efossz 发表于 2012-07-13 09:28
逐步了解一下
-c
-z
  1. linux:/home/xiaoshichao # printf 'a b\nc d\n\n\n\n\n\000\n\000e\000\000\nf'
  2. a b
  3. c d





  4. e
  5. flinux:/home/xiaoshichao #
复制代码
-c是计数
-z是以空字符分割?
.代表匹配除"\n"外的任意一个字符,所以第一个好了解
$代表行尾,^代表行首
\000不知道用在这里是要干吗?
第一个跟第四个好像还好了解,第二跟第三个为什么是5?

以前看到过RE中对^和$的这样一种说明:
若设置了RE对象的Multiline属性,^也匹配'\n'或'\r'之后的位置
若设置了RE对象的Multiline属性,$也匹配'\n'或'\r'之前的位置

论坛徽章:
0
5 [报告]
发表于 2012-07-13 12:16 |只看该作者
本帖最后由 personball 于 2012-07-13 12:21 编辑

回复 4# xiaoshichao143
  1. personball@vostro:~$printf 'a b\nc d\n\n\n\n\n\000\n\000e\000\000\nf'|cat -A
  2. a b$
  3. c d$
  4. $
  5. $
  6. $
  7. $
  8. ^@$
  9. ^@e^@^@$
  10. fpersonball@vostro:~$
复制代码
正则的行首和行尾标记,是在非空字符串才成立的,或者是具体程序实现时的问题
  1. personball@vostro:~$echo ''|sed 's/^/x/g'
  2. x
  3. personball@vostro:~$echo ''|sed 's/$/x/g'
  4. x
  5. personball@vostro:~$echo ''|sed 's/^\|$/x/g'
  6. x
  7. personball@vostro:~$echo 'a'|sed 's/^\|$/x/g'
  8. xax
  9. personball@vostro:~$

复制代码
上面这样讲可能不是很准确,但是空行实际行首和行尾是同一标记(这一句只能算猜测。。),你用grep 去匹配 行首^ 或者行尾$  估计是不对空行进行处理的
上面sed的例子也显示只有非空字符串,才可能将  行首行尾 两处都替换成x,空字符串只能出现一个x

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-02-25 06:20:00
6 [报告]
发表于 2012-07-13 14:14 |只看该作者
回复 3# blackold


    结果就是四条语句执行的结果了

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-02-25 06:20:00
7 [报告]
发表于 2012-07-13 14:27 |只看该作者
回复 5# personball


    嗯..应该是的,
  1. linux:~ # printf 'a b\nc d\n\n\n\n\n\000\n\000e\000\000\nf' | cat -A;echo
  2. a b$
  3. c d$
  4. $
  5. $
  6. $
  7. $
  8. ^@$
  9. ^@e^@^@$
  10. f
  11. linux:~ # printf 'a b\nc d\n\n\n\n\n\000\n\000e\000\000\nf' | grep -nz '^';echo
  12. 1:a b
  13. c d




  14. 2:
  15. 3:e4:5:
  16. f
  17. linux:~ # printf 'a b\nc d\n\n\n\n\n\000\n\000e\000\000\000f' | grep -nz '^';echo
  18. 1:a b
  19. c d




  20. 2:
  21. 3:e4:5:6:f
  22. linux:~ #
  23. linux:~ # printf 'a b\nc d\n\n\n\n\n\000\n\000e\000\000\000' | grep -nz '^';echo
  24. 1:a b
  25. c d




  26. 2:
  27. 3:e4:5:
  28. linux:~ #
复制代码

论坛徽章:
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
8 [报告]
发表于 2012-07-13 15:55 |只看该作者
回复 6# xiaoshichao143


    解释就在结果中啊。

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-02-25 06:20:00
9 [报告]
发表于 2012-07-13 17:32 |只看该作者
回复 8# blackold


    不明白为什么是这结果了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP