Chinaunix首页 | 论坛 | 博客
  • 博客访问: 185538
  • 博文数量: 40
  • 博客积分: 2576
  • 博客等级: 少校
  • 技术积分: 494
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-14 17:19
文章分类

全部博文(40)

文章存档

2011年(21)

2010年(19)

我的朋友

分类: LINUX

2010-11-18 22:06:25

grep
1.作用
  
在linux中grep命令是非常有用的,它和管道(|)配合使用,非常强大,用于搜索文本文件.如果想要在几个文本文件中查找一字符串,可以使用‘grep’命令。‘grep’在文本中搜索指定的字符串。

2.grep支持的正则表达式元字符
   主要有: 
      ^ 锚定行的开始 如:'^grep'匹配所有以grep开头的行。
      $ 锚定行的结束 如:'grep$'匹配所有以grep结尾的行。
      . 匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。
      * 匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。 .*一起用代表任意字符。
      [] 匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。
      [^] 匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。
     \(..\) 标记匹配字符,如'\(love\)',love被标记为1。
     \ <锚定单词的开始,如:'\匹配包含以grep开头的单词的行。
     \> 锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。
     x\{m\} 重复字符x,m次,如:'0\{5\}'匹配包含5个o的行。
     x\{m,\} 重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。
     x\{m,n\}重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5--10个o的行。
     \w 匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然   后是p。
    \W 不匹配文字和数字字符
    \b 单词锁定符,如: '\bgrep\b'只匹配grep

3.egrep支持的正则表达式的元字符
    主要有:
      ?  ,  +  ,  {}  ,  |  , ()
    这里的意思就不多加解释了,可以参考上面;
4.grep和egrep的联系和区别
             1.grep -E  =  egrep
            2.egrep中的元字符都可以在grep中用\来使用,即:
              \?  \+  \{\}   \|   \(\)
            3.egrep中可以使用grep中的元字符,但\<和\>得看操作体统的类型;
            4.个人建议不要用egrep,在特殊情况下用\来应用其正则表达式的元字符就可以了
5.grep的选项(egrep和其选项相同)
    -#  grep -2 'pattern file 列出匹配行的上下两行
    -A NUM,--after-context=NUM
               除了列出符合行之外,并且列出后NUM行。
    -B NUM,--before-context=NUM
               与 -A NUM 相对,但这此参数是显示除符合行之外
               并显示在它之前的NUM行
    -C [NUM], -NUM, --context[=NUM]  
               列出符合行之外并列出上下各NUM行,默认值是2
     -V, --version
               显示出grep的版本号到标准错误。
               当您在回报有关grep的bugs时,grep版本号是必须要包含在内的。
     -b, --byte-offset
               列出样式之前的内文总共有多少byte ..     
    --binary-files=TYPE
               此参数TYPE预设为binary(二进制),若以普通方式搜寻,只有2种结果:
                 1.若有符合的地方:显示Binary file 二进制文件名 matches
                 2.若没有符合的地方:什么都没有显示。  
     -c, --count
       不显示符合样式行,只显示符合的总行数。
       若再加上-v,--invert-match ,参数显示不符合的总行数。

    -d ACTION, --directories=ACTION
               若输入的档案是一个资料夹,使用ACTION去处理这个资料夹。
       预设ACTION是read(读取),也就是说此资料夹会被视为一般的档案;
       若ACTION是skip(略过),资料夹会被grep略过:
       若ACTION是recurse(递归),grep会去读取资料夹下所有的档案,
       此相当于-r 参数。

     -E, --extended-regexp
       采用规则表示式去解释样式。
     
     -e PATTERN, --regexp=PATTERN
       把样式做为一个partern,通常用在避免partern用-开始。 
       -F    grep -F =fgrep
           屏蔽所有的元字符,将其都作为普通字符

     -f FILE, --file=FILE
       事先将要搜寻的样式写入到一个档案,一行一个样式。
       然后采用档案搜寻。
       空的档案表示没有要搜寻的样式,因此也就不会有任何符合。
    -G, --basic-regexp
       将样式视为基本的规则表示式解释。(此为预设)

   -H, --with-filename
       在每个符合样式行前加上符合的文件名称,若有路径会显示路径
   -h, --no-filename  
               与-H参数相类似,但在输出时不显示路径。
    -I
               grep会强制认为此二进制档案没有包含任何搜寻样式,
               与--binary-files=without-match 参数相同。
    -i, --ignore-case     
               忽略大小写,包含要搜寻的样式及被搜寻的档案。         
    -L, --files-without-match
               不显示平常一般的输出结果,反而显示出没有符合的文件名称。
    -l, --files-with-matches               
               不显示平常一般的输出结果,只显示符合的文件名称。
    --mmap               
               如果可能,使用mmap系统呼叫去读取输入,而不是预设的read系统呼叫。
               在某些状况,--mmap 能产生较好的效能。 然而,--mmap
               如果运作中档案缩短,或I/O 错误发生时,
               可能造成未定义的行为(包含core dump),。
              
    -n, --line-number
               在显示行前,标上行号。
    -q, --quiet, --silent
               不显示任何的一般输出。请参阅-s或--no-messages
  -r, --recursive
       递归地,读取每个资料夹下的所有档案,此相当于 -d recsuse 参数。
  -s, --no-messages
       不显示关于不存在或无法读取的错误讯息。。            
   -V, --version
       显示出grep的版本号到标准错误。
       当您在回报有关grep的bugs时,grep版本号是必须要包含在内的。
   -v, --invert-match
         显示除搜寻样式行之外的全部。              
   -w, --word-regexp
          将搜寻样式视为一个字去搜寻,完全符合该"字"的行才会被列出。
     -x, --line-regexp
           将搜寻样式视为一行去搜寻,完全符合该"行"的行才会被列出。


6.实用grep和egrep举例:
      选项类:
      grep -l 'dd' *     -l 选项,只打印匹配项的文件名
       grep  -c  'tao'   file     只打印匹配的行总数
       grep  -w  'tao'  file    匹配有tao这个单词的行
       grep  -i    'TAO’ file  忽略大小写
       grep -C 'tao'   file   将匹配行的前后两行也打印
       grep -e '-tao'  file   当匹配项有-时候使用-e选项。用\也可以的,但用-F也是不行的
                                   可以用grep  --regexp=-tao file也可以 或者 ’\-tao‘
      grep  -x -e  '-tao shou kun'     file       匹配整行
      grep  -f file1   file     用file1中的模式来匹配
      grep -F ’\\\ddd****$$$$‘  file 此时的元字符都作为字符看待
      grep  -H 还有grep -h
      grep -L  和 grep -l  这都是相反的意思
  正则表达式类:
    grep  '[a-z]\{9\}'  file
    grep  ' ^[^a-z]'  file
    grep ' \(3\)\.[0-9].*\1  *\1'   file   匹配 例如: 3.4ee3  3
    grep ' \    egrep 'NW|EA'  file =grep -E 'NW|EA' file
                                =grep 'NW\|WA'  file
    egrep '3+'  file  =grep -E '3+' file
                            =grep '3\+'  file
   egrep  '2\.?[0-9] '  file =grep '2\.\?[0-9]' file
   egrep '(no)+'  file =grep '\(no\)\+' file \
   


                                                                                    ---------2010 11 18
       
 
 
     
    
阅读(1351) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-11-19 15:37:10

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com