Chinaunix

标题: grep问题 [打印本页]

作者: baijh    时间: 2009-04-29 16:41
标题: grep问题
本来要用 grep  '^J' test1
可是写成了:grep  '[^J]' test1
结果输出了整个文本内容,请帮忙解释下为什么会出现这种结果?
作者: blackold    时间: 2009-04-29 16:43
标题: 回复 #1 baijh 的帖子
正常啊。匹配包含一个非J且非空字符的行。

多谢Tim的指正!

[ 本帖最后由 blackold 于 2009-4-29 17:34 编辑 ]
作者: wtuter    时间: 2009-04-29 16:44
标题: 回复 #1 baijh 的帖子
本来要用 grep  '^J' test1
可是写成了:grep  '[^J]' test1

这两个意思不一样
作者: baijh    时间: 2009-04-29 16:48
原帖由 blackold 于 2009-4-29 16:43 发表
正常啊。匹配包含非J的行。


我原来认为也是这样的,可是输出的结果是有J的
结果如下:

M.Tansley       05/99    48311   Green    8       40      44
J.Lulu          06/99    48317   green    9       24      26
P.Bunny         02/99    48      Yellow   12      35      28
J.Troll         07/99    4842    Brown-3  12      26      26
L.Tansley       05/99    4712    Brown-2  12      30      28
作者: ly5066113    时间: 2009-04-29 16:50
原帖由 blackold 于 2009-4-29 16:43 发表
正常啊。匹配包含非J的行。


这个说法有点歧义啊。

匹配包含非J的行 应该是 grep -v 'J'
grep '[^J]' 是匹配包含一个非J字符的行
作者: blackold    时间: 2009-04-29 16:52
标题: 回复 #4 baijh 的帖子
只要行包含有非J的字符,那么就输出。
作者: blackold    时间: 2009-04-29 16:52
标题: 回复 #5 ly5066113 的帖子
受教


语言是个陷阱,文字表述很难没有歧义。

较严格的表述:
grep '[^J]'   匹配包含一个非J的字符(但该字符不是空字符)的行。
grep -v 'J'    匹配不包含J的行。

[ 本帖最后由 blackold 于 2009-4-29 17:08 编辑 ]
作者: baijh    时间: 2009-04-29 16:56
明白了,谢谢大家!
作者: cssjtuer    时间: 2009-04-29 19:00
学习
作者: ly5066113    时间: 2009-04-29 19:30
标题: 回复 #7 blackold 的帖子
同意,有些时候真的是只可意会,不可言传。
想要表术的严谨、简洁太难了。
作者: 我是DBA    时间: 2009-04-29 22:01
标题: 回复 #10 ly5066113 的帖子
学习了.
作者: bladmin    时间: 2009-04-29 23:55
原帖由 baijh 于 2009-4-29 16:48 发表


我原来认为也是这样的,可是输出的结果是有J的
结果如下:

M.Tansley       05/99    48311   Green    8       40      44
J.Lulu          06/99    48317   green    9       24      26
P.Bunny  ...


匹配非J,只要存在J以外的字符,都在匹配范围之内!
有点绕!




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2