免费注册 查看新帖 |

Chinaunix

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

grep 中括号匹配问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-07-08 16:47 |只看该作者 |倒序浏览
本帖最后由 bujipeng 于 2011-07-08 17:43 编辑
  1. [root@localhost test]# cat file
  2. ccccbbbbbb
  3. cccc:bbbbbb
  4. caaab:bbbbb

  5. DDDE
  6. "DDD
  7. caaabd2
  8. 12245ttttt
  9. 2224455
复制代码
1、grep大写字母会把小写字母也查找出来
  1. [root@localhost test]# cat file | grep [A-Z]
  2. ccccbbbbbb
  3. cccc:bbbbbb
  4. caaab:bbbbb
  5. DDDE
  6. "DDD
  7. caaabd2
  8. 12245ttttt
复制代码
2、而如果匹配非的话,则会把非全部为字母(不管大写或者小写)的都匹配出来

注明下:这个我本想是把A-Z全部排除在外,正确做法应该是 cat file  | grep [A-Z] -v,以下的做法只能排除全部为大写字母的情况
  1. [root@localhost test]# cat file | grep [^A-Z]
  2. cccc:bbbbbb
  3. caaab:bbbbb
  4. "DDD
  5. caaabd2
  6. 12245ttttt
  7. 2224455
复制代码
还请哪位大侠帮忙解释一下为什么?

论坛徽章:
0
2 [报告]
发表于 2011-07-08 16:56 |只看该作者
回复 1# bujipeng


第一个
  1. [root@ ~]# echo '# ccccbbbbbb
  2. > # cccc:bbbbbb
  3. > # caaab:bbbbb
  4. > #
  5. >
  6. > # DDDE
  7. > # "DDD
  8. > # caaabd2
  9. > # 12245ttttt
  10. > # 2224455' | grep [A-Z]
  11. # DDDE
  12. # "DDD
复制代码
并没有出现你说的那种情况.你用的是什么shell阿?



第二个是正确的[^A-Z] : 首字母非A-Z

论坛徽章:
0
3 [报告]
发表于 2011-07-08 17:07 |只看该作者
加上 LANG=C

论坛徽章:
0
4 [报告]
发表于 2011-07-08 17:18 |只看该作者
回复  bujipeng


第一个并没有出现你说的那种情况.你用的是什么shell阿?



第二个是正确的 ...
南极雨 发表于 2011-07-08 16:56



    如果是首字母非A-Z的话,是不是应该这样

cat file | grep ^[^A-Z]

论坛徽章:
0
5 [报告]
发表于 2011-07-08 17:19 |只看该作者
本帖最后由 bujipeng 于 2011-07-08 17:28 编辑
加上 LANG=C
li2002 发表于 2011-07-08 17:07



    这个解决了第一个问题

使用一种比较粗的方法,却可以获取得到期望的结果
  1. [root@localhost test]# cat file  | grep [ABCDEFGHIJKLMNOPQRSTUVWXYZ]
  2. DDDE
  3. "DDD
复制代码
我的当前LANG是en_US.UTF-8,不区分大小写吗?

论坛徽章:
0
6 [报告]
发表于 2011-07-08 17:27 |只看该作者
回复 4# bujipeng


效果一样:
  1. [root@center ~]# echo '# ccccbbbbbb
  2. # cccc:bbbbbb
  3. # caaab:bbbbb
  4. #

  5. # DDDE
  6. # "DDD
  7. # caaabd2
  8. # 12245ttttt
  9. # 2224455' | sed 's/^# //g;s/^"//g'| grep ^[^A-Z]
  10. ccccbbbbbb
  11. cccc:bbbbbb
  12. caaab:bbbbb
  13. #
  14. caaabd2
  15. 12245ttttt
  16. 2224455
复制代码
  1. [root@center ~]# echo '# ccccbbbbbb
  2. # cccc:bbbbbb
  3. # caaab:bbbbb
  4. #

  5. # DDDE
  6. # "DDD
  7. # caaabd2
  8. # 12245ttttt
  9. # 2224455' | sed 's/^# //g;s/^"//g'| grep [^A-Z]
  10. ccccbbbbbb
  11. cccc:bbbbbb
  12. caaab:bbbbb
  13. #
  14. caaabd2
  15. 12245ttttt
  16. 2224455
复制代码

论坛徽章:
0
7 [报告]
发表于 2011-07-08 17:29 |只看该作者
第二个有什么问题?不是很正常吗

论坛徽章:
0
8 [报告]
发表于 2011-07-08 17:34 |只看该作者
回复 6# 南极雨


    似乎不太对

把文件中增加一个GGG"
  1. ccccbbbbbb
  2. cccc:bbbbbb
  3. caaab:bbbbb

  4. DDDE
  5. "DDD
  6. GGG"
  7. caaabd2
  8. 12245ttttt
  9. 2224455
复制代码
  1. [root@localhost test]# cat file  | grep [^A-Z]
  2. cccc:bbbbbb
  3. caaab:bbbbb
  4. "DDD
  5. GGG"
  6. caaabd2
  7. 12245ttttt
  8. 2224455
复制代码
GGG也被找出来了

但是如果加上了^,则打印不出来
  1. [root@localhost test]# cat file  | grep ^[^A-Z]
  2. ccccbbbbbb
  3. cccc:bbbbbb
  4. caaab:bbbbb
  5. "DDD
  6. caaabd2
  7. 12245ttttt
  8. 2224455
复制代码

论坛徽章:
0
9 [报告]
发表于 2011-07-08 17:40 |只看该作者
第二个有什么问题?不是很正常吗
li2002 发表于 2011-07-08 17:29



    对对,我晕了。。。
   我本想是把有大写字母的都排除在外,逻辑搞混了。

论坛徽章:
0
10 [报告]
发表于 2011-07-08 17:46 |只看该作者
对对,我晕了。。。
   我本想是把有大写字母的都排除在外,逻辑搞混了。
bujipeng 发表于 2011-07-08 17:40



    还有 li2002 兄可以帮忙解释下为啥要设置LANG=C吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP