免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: j3kljs02398j
打印 上一主题 下一主题

[文本处理] grep 技巧 11则 [复制链接]

论坛徽章:
0
31 [报告]
发表于 2011-10-10 13:34 |只看该作者
本帖最后由 mpstat 于 2011-10-10 13:46 编辑

回复 31# j3kljs02398j


    我是这样理解的:

  1. [iscs@linux-sp1]:/users/iscs>$ ps -ef|grep top|grep [top]
  2. iscs       440 21423  0 13:22 pts/3    00:00:00 top
  3. iscs       486   449  0 13:22 pts/2    00:00:00 grep top
  4. iscs       487   449  0 13:22 pts/2    00:00:00 grep [top]
复制代码
这句话会在ps列表里产生三个跟top有关的数据,grep的目标是top这三个字母组成的字符串,所以三个都符合

  1. [iscs@linux-sp1]:/users/iscs>$ ps -ef|grep top|grep [t]op
  2. iscs       440 21423  0 13:22 pts/3    00:00:00 top
  3. iscs       491   449  0 13:22 pts/2    00:00:00 grep top
复制代码
这句话会在ps列表里产生两个跟top有关的数据,一个跟‘[t]op'有关的数据,这一点可以在同一台机器的另一个终端上用
while :
do
ps -ef|grep grep
done
可以看到:

  1. iscs      1894   449  0 13:27 pts/2    00:00:00 grep top
  2. iscs      1895   449  0 13:27 pts/2    00:00:00 grep [t]op
复制代码
grep的目标是top这三个字母组成的字符串,所以两个符合

  1. [iscs@linux-sp1]:/users/iscs>$ ps -ef|grep to[p]
  2. iscs       440 21423  0 13:22 pts/3    00:00:00 top
复制代码
这句话会在ps列表里产生一个跟top有并的数据,一个跟’to[p]'有关的数据(换句话说[]框住哪个字母都是一样的),grep的目标是top这三个字母组成的字符串,所以只有一个符合

论坛徽章:
0
32 [报告]
发表于 2011-10-10 13:44 |只看该作者
本帖最后由 j3kljs02398j 于 2011-10-10 13:47 编辑

回复 32# mpstat


    这回是明白了,非常感谢!

论坛徽章:
0
33 [报告]
发表于 2011-10-10 13:53 |只看该作者
回复 33# j3kljs02398j


    补充两个比较少见的问题:
我的环境是
  1. [iscs@linux-sp1]:/users/iscs>$ uname -a
  2. Linux linux-sp1 2.6.32.12-0.7-default #1 SMP 2010-05-20 11:14:20 +0200 x86_64 x86_64 x86_64 GNU/Linux
  3. [iscs@linux-sp1]:/users/iscs>$ grep --version
  4. GNU grep 2.5.2

  5. Copyright (C) 1988, 1992-2002, 2004, 2005  Free Software Foundation, Inc.
  6. This is free software; see the source for copying conditions.  There is NO
  7. warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
复制代码
它的man手册里有句这个:

       在方括号表达式之中,一个 范围表达式 (range) 由两个字符组成,中间用一个连字符 (hyphen) 分隔。它匹配在这两个字符之间的任何一个字符,使用本地化的序列
       顺序和字符集。(that sorts between the two characters,inclusive, using the locale's collating sequence and character set.) 例如,在默认的 C  locale
       中 , [a-d] 与 [abcd] 等价。典型的,许多 locale 将字符以字典顺序排序,在这些 locale 中, [a-d] 不与 [abcd] 等价;例如它可能与 [aBbCcDd] 等价。要获
       得传统的对方括号表达式的解释,可以设定环境变量 LC_ALL 值为 C 来使用 locale C


举个例子:

  1. [iscs@linux-sp1]:/users/iscs>$ echo $LC_ALL

  2. [iscs@linux-sp1]:/users/iscs>$ echo "ABC
  3. > abc"|grep '[a-c]'
  4. ABC
  5. abc
  6. [iscs@linux-sp1]:/users/iscs>$ echo "ABC
  7. abc"|grep -E '[a-c]'
  8. ABC
  9. abc
  10. [iscs@linux-sp1]:/users/iscs>$ echo "ABC
  11. abc"|grep -P '[a-c]'
  12. abc
  13. [iscs@linux-sp1]:/users/iscs>$ export LC_ALL="C"
  14. [iscs@linux-sp1]:/users/iscs>$ echo "ABC         
  15. abc"|grep '[a-c]'
  16. [iscs@linux-sp1]:/users/iscs>$ echo "ABC        
  17. abc"|grep -P '[a-c]'
  18. abc
  19. [iscs@linux-sp1]:/users/iscs>$ echo "ABC        
  20. abc"|grep -E '[a-c]'
  21. abc
  22. abc
复制代码
就是说[]的效果会受一个环境变量的影响,连-E选项也不能例外 -P选项可以正确匹配.这个可能不具有一定的移植性,我在Solaris上试过没有这个问题,可能grep版本不对.但在linux上以前在版上有人遇到过,特别说明一下.

还有一个是--的问题,比如
  1. [iscs@linux-sp1]:/users/iscs>$ echo "--shit"|grep --shit
  2. grep: unrecognized option '--shit'
  3. Usage: grep [OPTION]... PATTERN [FILE]...
  4. Try `grep --help' for more information.
  5. [iscs@linux-sp1]:/users/iscs>$ echo "--shit"|grep -- --shit
  6. --shit
复制代码

论坛徽章:
0
34 [报告]
发表于 2011-10-10 14:43 |只看该作者
回复 34# mpstat


    感谢mpstat兄补充,已经更新。

论坛徽章:
0
35 [报告]
发表于 2011-10-10 15:48 |只看该作者
這個不錯,謝謝LZ...

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
36 [报告]
发表于 2011-10-11 07:43 |只看该作者
很方便

论坛徽章:
0
37 [报告]
发表于 2011-10-18 22:16 |只看该作者
总结的很不错,顶一下。学习了。

论坛徽章:
0
38 [报告]
发表于 2011-10-22 16:53 |只看该作者
很好的文章,学习了

论坛徽章:
0
39 [报告]
发表于 2012-03-30 16:43 |只看该作者
我觉得这个贴子应该给个精华

论坛徽章:
1
15-16赛季CBA联赛之吉林
日期:2018-05-23 14:31:12
40 [报告]
发表于 2012-03-30 22:53 |只看该作者
mark 之
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP