探索grep命令
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命令的更多相关文章
- 快速掌握grep命令及正则表达式
Linux系统自带了支持拓展正则表达式的 GNU 版本 grep 工具,所有的Linux发行版中均默认安装grep ,grep 命令被用来检索一台服务器或工作站上任何位置的文本信息,如何在 Linux ...
- linux grep命令
linux grep命令1.作用Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expressio ...
- grep 命令
简单介绍:grep命令是用于分析一行信息,若当中有我们所需要的信息,就将该行取出来. 语法结构:grep [-acinv] [--color=auto] '查找关键字' #{filename} -a: ...
- linux管道命令grep命令参数及用法详解---附使用案例|grep
功能说明:查找文件里符合条件的字符串. 语 法:grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>] ...
- grep 命令详解
[root@www ~]# grep [-acinv] [--color=auto] '搜寻字符串' filename 选项与参数: -a :将 binary 文件以 text 文件的方式搜寻数据 - ...
- grep 命令操作
linux grep命令 1.作用Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expressi ...
- Linux命令(23)grep命令的使用
grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正 ...
- 每天一个linux命令(39):grep 命令
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则表达 ...
- grep命令的使用
grep是UNIX和LINUX中使用最广泛的命令之一.grep允许对文本文件进行模式查找.如果找到匹配模式, grep打印包含模式的所有行.grep支持基本正则表达式,也支持其扩展集.grep有三种变 ...
随机推荐
- RNN(recurrent neural network)学习笔记
参考:https://www.jianshu.com/p/9dc9f41f0b29 以及<白话深度学习与TensorFlow> 与前馈神经网络.卷积神经网络等不同之处在于,RNN具有一定 ...
- date +%F时间日期
date +%Y -%m-%d 年月日 date +%T 显示时间 HMS几点几分几秒 -%H 为小时 %w 周几 date -d “-1day” 一天之前 date ...
- sql 死锁
先上代码connectA: BEGIN TRAN UPDATE dbo.Student SET Sorce= WHERE id= waitfor delay '00:00:05' SELECT * F ...
- 转 UTL_FILE Throws ORA-29284 Or ORA-29283 When Attempting To READ File
APPLIES TO: PL/SQL - Version 9.2.0.8 and laterInformation in this document applies to any platform.* ...
- 设计模式学习总结(七)适配器模式(Adapter)
适配器模式主要是通过适配器来实现接口的统一,如要实现国内手机在国外充电,则需要在不同的国家采用不同的适配器来进行兼容! 一.示例展示: 以下例子主要通过给笔记本电脑添加类似手机打电话和发短信的功能来详 ...
- CenctOS6 and CenctOS7 多种姿势解决忘记密码
-----linux---- 忘记密码啦!!! 忘记密码教程!!! 教你们忘记密码(我原来密码就是123456,忘记是不可能的!假装忘记的样子 0.0) 现在我们忘记密码了!对忘记密码了.我忘记密码了 ...
- windows 系统 python3.5安装 lxml 库
有个提示uable find vc***,的错误,如果按照修改python脚本的方法会发现还需要安装VS,安装好了还不一定可以解决问题. 费了半天劲,结合网络上部分信息终于找到了解决方案: 1.打开文 ...
- 移动平台的meta标签(转)
1.Meta 之 viewport 说到移动平台meta标签,那就不得不说一下viewport了,那么什么是viewport呢? viewport即可视区域,对于桌面浏览器而言,viewport指的就 ...
- angular 首屏优化
前一段时间把公司的一个angular项目做了一次大的优化,记录一下过程. 起因: 起因是用户反映网站加载时间过长,从loading画面显示到页面可响应要13s,对于一般的页面恐怕没有用户愿意等待这么久 ...
- asp ajax
//[AjaxPro.AjaxMethod()] //public DataTable loadChecked() //{ // return BDAContext.GetObject<ICNP ...