日期:2014-05-16  浏览次数:20752 次

如何使用Unix/Linux grep命令——磨刀不误砍柴工系列
如何使用Unix/Linux grep命令
    ——磨刀不误砍柴工系列
     Garygaowork#gmail.com

       grep在一个或多个文件中查找与模式字符串(pattern)匹配的行,并将搜索的结果打印出来,不会修改原文件内容。
使用grep 命令的语法为:

 $grep [option(s)] pattern [file(s)]
   

    其中optiongrep命令的选项,pattern为要匹配的简单字符串或携带特殊字符的模式字符串,file为文件列表,可有多个文件。



Part 1  grep中经常用到的选项(option)

-i 忽略pattern中的大小写
 $grep -i hAL /etc/passwd
-w 搜索整个词汇
    忽略大小写并搜索整个词汇"samba"
  $grep -iw "samba" /tec/samba/smb.conf   
  # This is the main Samba configuration file. You should read the    
  # here. Samba has a huge number of configurable options (perhaps too    
  # For a step to step guide on installing, configuring and using samba,    
  # read the Samba-HOWTO-Collection. This may be obtained from:

  

-r 递归地指定文件所在目录中的所有子目录中的文件
-v 查找与pattern不匹配的行
定义输出方式:
-o 仅打印出匹配的一段,而非整行
-n 打印出匹配行的行号
-l 仅打印出匹配行所在的文件
-c 打印出每个文件中匹配行的总数
-A num 显示匹配行之后的num行
-B num 显示匹配行之前的num行
-C num 相当于 -A num 与 -B num 的组合
--color=auto 将pattern在匹配行中高亮输出

注意:
(1).选项区分大小写
(2).多个选项可以一起使用,例如:
  $grep -iwr
(3).grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。

Part 2 在grep中使用正则表达式

1.基本的匹配模式
    尽管直接使用最简单直接的pattern字串可以完成一些重要任务,但是grep命令的真正威力在于它可以使用正则表达式来完成复杂的模式字串的匹配。grep命令中使用的是“基本的正则表达式”,如果想使用更高级的正则表达式规则,需要指定选项 -E ,相当于egrep命令。
    以下字符或字符串在正则表达式的规则中具有特殊意义,如,*,+,[,],^,$,\,{,}
    它们的多种组合展示了基本的正则表达式的匹配模式:
    (1)'.'匹配任意单一字符
    (2) X* 与包含连续0个或多个字符X的行匹配
    (3) X\+ 与包含连续1个或多个字符X的行匹配
    (4) [a-z] 与包含a-z的其中一个字符的行匹配
    (5) [^a-z] 与不包含a-z的其中一个字符的行匹配
    (6) [0-9] 与包含0-9的其中一个字符的行匹配
    (7) ^hello 与以字串hello起始的行匹配
    (8) hello$ 与以字串hello结束的行匹配
    (9) \ 转义字符,后跟特殊字符,可