grep是linux的一款搜索工具,基本啥linux版本都有自带此工具。下面部分参数若没有说明,表示功力不够,理解不了。

选择匹配器

-E 正则表达式(相当于egrep命令)
-F 将pattern当作纯文本,纯字符串匹配(相当于fgrep命令)
-G 基础表达式(默认的,不需指定)
-P perl正则表达式

匹配控制

-e pattern pattern就是要匹配的模式串(默认,不需指定)
-f filename 模式串在文件中给出
-i 忽略大小写
-v 反转匹配,就是选中那些没匹配到的行
-w 匹配整个词
-x 匹配整行

输出控制

-c 统计匹配了多少行
--color=WHEN 什么时候显示颜色,WHEN可以是never、always、auto(不过颜色是由环境变量GREP_COLORS定义的),一般用auto即可
-L 输出一个没有任一行被匹配到的文件名(最多仅输出一个文件名,输出后立即停止搜索)
-l 输出一个至少有一行被匹配到的文件名(注意点同上)
-m NUM 指定每个文件只输出几行,即最多在搜出NUM行后就停止这个文件的搜索
-o 只输出行中匹配到的部分,而不是输出整行
-q 不输出任何东西?连错误都不输出,很奇怪的参数
-s 不输出错误信息,包括文件不存在、不可读文件等产生的错误

输出行前缀控制

-b
-H 每次匹配到就打印文件名(在输入文件个数为1时就是默认项)
-h 省去文件名的前缀(文件的位置比较深,前缀比较长时有用)
--label=LABEL
-n 顺便打印出匹配到的模式在文件中的行号
-T
-u 报告unix风格的字节偏移(win系统才有用)
-Z 打印NULL字符

上下文行控制

-A NUM 输出的每个匹配行之后多输出NUM行上下文
-B NUM 和-A同理,就是在匹配行之前的上下文而已
-C NUM 输出NUM行上下文,估计是包括上文和下文

选择文件和目录

-a 按二进制处理文件
--binary-files=TYPE 如果TYPE是text,就相当于-a
-D ACTION 如果输入文件是个设备、FIFO、socket,就以ACTION来处理它,可以是skip、read(默认)
-d ACTION 如果输入的是目录,则以ACTION来处理它, ACTION可以是skip、recurse、read(默认)
--exclude=GLOB 忽略那些文件名能被GLOB匹配中的文件
--exclude-from=FILE 同上,只是将多个GLOB写在文件中,匹配中其中一个GLOB都会被忽略
--exclude-dir=DIR 忽略指定目录,DIR也是个模式串,目录可以是递归的(就是说可以是某个目录下的目录名)
-I
--include=GLOB 只搜索那些文件名被GLOB匹配的文件
-r 递归搜索所有文件(默认是只搜当前一层文件),不考虑符号链接
-R 同-r,但是考虑符号链接

其他选项

--mmap 如果可能的话,用系统调用mmap()来读取输入文件,而不是用read()
-U 将输入文件作为二进制处理,一般在win系统中会去读文件前32KB来判断文件类型(不是win系统则选项无效)

实战

1、
如果输入多个文件,可以用管道符|,grep匹配的就是文件名了,输出的也是文件名,比如:
ls | grep "int"

如果输入的只有单个文件,grep匹配的就是文件中的行了,比如:
grep "int" test.txt

如果输入多个文件,又要匹配每个文件中的行,那就要配合xargs命令了,如:
ls | xargs grep "int"

如果不想用xargs,也可以在最后面加上要匹配的文件名规则,grep就知道你要匹配的是行,如:
ls | xargs grep "int" *.txt

2、
如果输入的是多个文件,可以直接将文件名列出来,如:
grep "int" a.cpp b.cpp d.cpp g.cpp

如果要在多个文件中指定部分文件作为输入,可以用通配符*等来匹配文件名,如:
grep "int" *.cpp

当然,管道符也是可以照样用的,这样它就不是从本目录搜文件,而是从输入中搜文件,如:
ls | grep "int" *.cpp

3、
grep默认是匹配串的,就是只要匹配到就能输出,如果要匹配整个单词,可以用-w,如:
grep -w "int" *.cpp

如果要匹配整个行,可以用-x,如:
grep -x "int" *.cpp

反转匹配一下试试,如:
grep -vx "int" *.cpp

忽略一下大小写,如:
grep -ivx "int" *.cpp

4、
如果想统计某文件中匹配到几个,可以用-c,如:
grep -c "static" *.cpp

有颜色的话看起来显眼一些,如:
grep --color=auto "static" *.cpp

如果想知道哪些文件中不含指定关键字,可以用-L,只输出文件名,如:
grep -L --color=auto "static" *.cpp

5、

搜索多个关键字,匹配其中一个就输出,如:
grep "std\|abc\|oom" * -rni


未完待续。。。

探索grep命令的更多相关文章

  1. 快速掌握grep命令及正则表达式

    Linux系统自带了支持拓展正则表达式的 GNU 版本 grep 工具,所有的Linux发行版中均默认安装grep ,grep 命令被用来检索一台服务器或工作站上任何位置的文本信息,如何在 Linux ...

  2. linux grep命令

    linux grep命令1.作用Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expressio ...

  3. grep 命令

    简单介绍:grep命令是用于分析一行信息,若当中有我们所需要的信息,就将该行取出来. 语法结构:grep [-acinv] [--color=auto] '查找关键字' #{filename} -a: ...

  4. linux管道命令grep命令参数及用法详解---附使用案例|grep

    功能说明:查找文件里符合条件的字符串. 语 法:grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>] ...

  5. grep 命令详解

    [root@www ~]# grep [-acinv] [--color=auto] '搜寻字符串' filename 选项与参数: -a :将 binary 文件以 text 文件的方式搜寻数据 - ...

  6. grep 命令操作

    linux grep命令 1.作用Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expressi ...

  7. Linux命令(23)grep命令的使用

    grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正 ...

  8. 每天一个linux命令(39):grep 命令

    Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则表达 ...

  9. grep命令的使用

    grep是UNIX和LINUX中使用最广泛的命令之一.grep允许对文本文件进行模式查找.如果找到匹配模式, grep打印包含模式的所有行.grep支持基本正则表达式,也支持其扩展集.grep有三种变 ...

随机推荐

  1. gym 100589A queries on the Tree 树状数组 + 分块

    题目传送门 题目大意: 给定一颗根节点为1的树,有两种操作,第一种操作是将与根节点距离为L的节点权值全部加上val,第二个操作是查询以x为根节点的子树的权重. 思路: 思考后发现,以dfs序建立树状数 ...

  2. P3066 [USACO12DEC]逃跑的BarnRunning Away From (树上二分)

    题意 给出以1号点为根的一棵有根树,问每个点的子树中与它距离小于等于l的点有多少个. 树上二分.这个做法还是基于树上差分的,也就是对于每一个点uu,我们要找到它向上跳LL的长度最高能够跳到的祖先.(当 ...

  3. Randy Pausch’s Last Lecture

          he University of Virginia American Studies Program 2002-2003.                     Randy Pausch ...

  4. UVA - 136 Ugly Numbers (有关set使用的一道题)

    Ugly numbers are numbers whose only prime factors are 2, 3 or 5. The sequence1, 2, 3, 4, 5, 6, 8, 9, ...

  5. 出现socket:(10107)系统调用失败

    在编译vue项目,npm run dev出现 socket:(10107)系统调用失败  解决方案: 以管理员身份打开cmd,使用以下命令:     netsh winsock reset 重启电脑即 ...

  6. js数组去重 javascript版

    //js数组去重 //思路: // 1.放入第一个元素 // 2.放入第n个元素,和第n个之前的元素就行比较,如果有重复,则跳过.没有重复就加入数组中 // 3.返回新的去重后数组 Array.pro ...

  7. nginx+uwsgi+virtualenv+supervisor部署项目

    一.导论 WSGI是Web服务器网关接口.它是一个规范,描述了Web服务器如何与Web应用程序通信,以及Web应用程序如何链接在一起以处理一个请求,(接收请求,处理请求,响应请求) 基于wsgi运行的 ...

  8. sql server优化思路

    查询速度慢的原因很多,常见如下几种:    1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)    2.I/O吞吐量小,形成了瓶颈效应.    3.没有创建计算列导致查询不优化 ...

  9. shell特殊字符汇总【转】

    Linux下无论如何都是要用到shell命令的,在Shell的实际使用中,有编程经验的很容易上手,但稍微有难度的是shell里面的那些个符号,各种特殊的符号在我们编写Shell脚本的时候如果能够用的好 ...

  10. (转)Linux磁盘空间监控告警 && Linux磁盘管理

    Linux磁盘空间监控告警 http://blog.csdn.net/github_39069288/article/details/73478784-----------Linux磁盘管理 原文:h ...