ITPub博客

首页 > Linux操作系统 > Linux操作系统 > grep 命令:在文件中搜索指定的字符串

grep 命令:在文件中搜索指定的字符串

原创 Linux操作系统 作者:gengzhizhen 时间:2010-09-28 21:17:05 0 删除 编辑

6.11.10  grep 命令:在文件中搜索指定的字符串

grep命令是"global regular expression print"的缩写,用于在文件中搜索指定的字符串模式,列出含有匹配模式字符串的文件名,并输出含有该字符串的文本行,命令格式为:

  1. grep [选项] [查找模式][文件名……] 

其中各可用选项意义如下。

-F:将查找模式看成是单纯的字符串。

-i:要查找的字符串不区分字母的大小写。

-r:以递归方式查询目录下的所有子目录的文件。

-n:标出包含指定字符串的行编号。

例如在文件example中查找包含"aa"字符串的行,命令如下:

  1. # cat  example  
  2. aa bb cc dd  
  3. aa bb ff  
  4. ee  
  5. # grep  aa  example  
  6. aa bb cc dd  
  7. aa bb ff 

如果待查找的字符串模式的字数大于1,则必须在字符串模式两边使用单引号,否则系统会只把第一个字作为搜索目录,如:

  1. # cat  example  
  2. aa bb cc dd  
  3. aa bb ff  
  4. ee  
  5. # grep  bb  cc  example  
  6. grep: cc: 没有那个文件或目录  
  7. example:aa bb cc dd  
  8. example:aa bb ff  
  9. # grep  'bb cc'  example  
  10. aa bb cc dd 

例如在/passwd文件中查找包含"teacher"字符串的行,命令为:

  1. #grep  -F  teacher  /etc/passwd  
  2. teacher:*:500:500: teacher:/home/ teacher:/bin/bash 

再如在file1中查找包含"print" 字符串的所有行,不管字符的大小写,命令行如下:

  1. # grep  -i  'print'  file1 

又如查找包含字符串"bb cc"的行,输出该行,并输出该行所在的行号,命令为:

  1. # cat  example  
  2. aa bb cc dd  
  3. aa bb ff  
  4. ee  
  5. # grep  -n 'bb cc'  example  
  6. 1:aa bb cc dd 

通常grep命令配合管道符(|)还可用来作为其他命令的输入,例如统计指定文件中包含某字符串的行数、字数和字节数:

  1. # cat  example  
  2. aa bb cc dd  
  3. aa bb ff  
  4. ee  
  5. # grep  'bb' example | wc  
  6.       2       7      21 

grep命令除了作为其他命令的输入,也可以作为一些命令(例如ls,ps)的输出。例如在当前运行的进程中查找vi程序的进程信息,命令行如下:

  1. # ps  aux  |  grep  vi  
  2. root      5716  0.0  0.2   4956   736 pts/1  
    T    Jul25   0:00 vi  
  3. root     20681  0.3  0.4   4960  1012 pts/1   
    T    14:21   0:00 vi  
  4. root     20689  5.0  0.2   4132   668 pts/1   
    R+   14:22   0:00 grep vi 

注意:还有两个命令与grep非常相似。一个是"egrep",表示Extend grep,执行效率比grep高,但需占用较大的内存空间;另一个是"fgrep",占用空间比egrep小,且速度也比grep快。由于三个命令的结构、功能类似,因此大部分参数可以共享。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15142212/viewspace-675048/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-02-09

  • 博文量
    119
  • 访问量
    205077