grep 用法简述

于 2012年03月16日 发布在 linux应用 跳到评论

grep( global search regular expression(RE) and print out the line)是一个在文本中搜索模式并且把有匹配文本的行输出出来的工具,使用的前提是要知道一下正则表达式相关的知识。grep命令的基本格式如下

grep -选项 ‘搜索字符串’ 文件

当我们不加‘文件’参数的时候,grep默认从标准输入读入。每处理一行,如果能搜索到匹配模式的,就将整行输出出来。如果有很多文件,那么搜索到一行,将会在行前面加上文件名前缀。比如搜索当前文件夹下所有文件下有那些行包含‘fcntl‘ ,那么就用 grep ’fcntl‘ *。

不同的选项有不同的效果:

-c 输出匹配的行的数目
-i 忽略搜索串中的字母大小写
-n 输出行号
-v 反向选择,输出不满足要求的行
-a 在二进制文件中查找
-r 递归搜索子文件夹中的文件
-E 使用扩展正则表达式进行匹配, egrep 相当于 grep -E
-Hh h显示文件名前缀,H不显示。默认显示。
-A n 显示匹配行之后n行(After)
-B n 显示匹配行开始到之前n行(Before)
-C n 相当于-A n -B n = =||
-d recurse|read|skip recurse表示递归处理子目录(-d recurse先当于 -r),skip表示忽略,read表示把目录做成一般文件

grep包含的工具还有egrep,fgrep, rgrep。其中egrep即grep -E,可以使用扩展正则表达式,扩展的就多了+?|()这几个东东,基本的正则用到的符号有^$.\*{}[] ,不过需要注意的是在shell中{}()都要用\号来转义。fgrep搜索固定的字符串,相当于grep -F。rgrep相当与grep -r。这三种的存在都是为了移植性,现在最好用grep + 选项的方式来完成这三个命令的功能。

先面简单写几个例子:
显示当前目录下所有扩展名为.doc文件中包含dang的行,不论大小写:
grep -i dang *.doc //注意这里的*不是正则表达式中的*,这里是通配符。
显示当前目录下所有以hello开头的文件中包含printf的行,并显示是第几行:
grep -n ‘printf’ hello*
显示当前文件下(包含子文件夹)文件中包含me的行,并显示‘前后2行’,总共4行:
grep -rC 2 me *

参考资料:
1.《鸟哥的linux私房菜 基础学习篇(第二版)》 Page 244
2.《linux常用工具入门到精通》Page 142
3.grep学习笔记 http://man.chinaunix.net/newsoft/grep/open.htm

本文共有 一条评论 | 沙发:文章评论

留下评论!

:wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)