grep用法简述

spring 1年前 ⋅ 576 阅读

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

更多内容请访问:IT源点

相关文章推荐

全部评论: 0

    我有话说: