专栏首页C/C++基础Linux命令(32)——grep命令

Linux命令(32)——grep命令

1.简介:

grep(Globally search a Regular Expression and Print)是GNU开发的一款免费开源的文本搜索工具。grep家族包括grep、egrep和fgrep。其功能是在指定的文件中查找一个指定格式或者内容的字符串,并将匹配的字符串所在行打印出来。如果不指定任何文件名称,或给定的文件名为“-”,则从标准输入设备读取数据。grep支持正则表达式搜索文本。

2.命令格式

grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]

3.选项说明

-a,--text:将binary文件以text文件的方式处理,等同于--binary-files=text选项。
-A [行数]:后紧跟数字,为after之意,除了列出匹配字符串所在行之外,后续的n行也列出来。
-b,--byte-offset:在匹配的行之前,标示出该行第一个字符的位编号,即字符在文本中的字节偏移下标,包括换行符。
-B [行数],--before-context=[行数]:后紧跟数字,为befor之意,显示匹配行以及该行之前指定行数的内容。
-c,--count:只输出匹配的行数,不是匹配字符串的个数。
-C [行数],-[NUM],--context=[NUM]:显示匹配的行以及改行上下指定行数的内容。
--color=auto:可以将找到的关键词部分加上颜色的显示。
-d [动作],--directories=[ACTION]:当指定要查找的是目录而非文件时,使用指定的操作处理。动作有:read(默认)像普通文件一样读取目录;skip:忽略指定目录;recurse:递归读取指定目录下的所有文件,此操作等同于-r选项。
-D [ACTION], --devices=[ACTION]:如果输入文件是设备,命名管道(FIFO)或套接字,则使用指定动作处理它。默认情况下,为读取操作(read),这意味着读取设备就像它们是
普通文件。如果操作是跳过(skip),设备将被悄悄跳过。
-e <匹配模式>:设置查找文件内容的匹配模式。
-E,--extended-regexp:使用扩展正则表达式解释匹配模式。
-f [文件], --file=[FILE]:将匹配模式写在文件中,文件中一行内容对应一个匹配模式。
-F,--fixed-strings:将匹配模式看作固定字符串。
-G,--basic-regexp:使用基本正则表达式解释匹配模式。
-h,--no-filename:查询多文件时不显示文件名。
-H,--with-filename:查询多文件时显示文件名(默认选项)。
-i,--ignore-case:忽略字符大小写。
-I:忽略二进制文件。
-l,--files-with-matches:只输出包含匹配字符的文件名。
-L,--files-without-match:不显示内容符合指定的匹配模式的文件名。
-n,--line-number:显示匹配行及行号。
-o,--only-matching:只显示匹配的字符串,并以单独行输出。
-q,--quiet, --silent:静默模式,不显示任何信息到标准输出。
-s,--no-messages:不显示不存在或无匹配文本的错误信息。
-T, --initial-tab:使用tab使匹配行对齐;
-u, --unix-byte-offsets:以UNIX样式字节偏移。使用该选项,是grep产生的结果与在Unix机器上相同,此选项必须与-b同时使用,否则没有效果,也必须要在 MS-DOS和MS-Windows平台上使用。
-Z, --null:文件名与匹配行之间使用空字符。grep默认会在每个输出前打印文件名,文件名与匹配行之间会有一个冒号隔开,-Z选项告诉grep不要使用冒号了,使用一个NUL字符;
-v,--invert-match:反向选择,显示不包含匹配文本的所有行。
-V,--version:显示版本信息。
-w,--word-regexp:只显示包含模式字符串的单词(word)的行。
--help:显示帮助信息。
-V, --version:显示版本信息。

4.常用示例

(1)统计字段出现次数。

grep -o [pattern] [finename...]|wc -l

命令解释: (a)grep -o -o是only-matching缩写。Print only the matched(non-empty) parts of a matching line, with each such part on a separate output line。以单独的行输出匹配的每一个模式字符串。

(b)wc -l 统一输入的行数。就可以知道这个要统计的字段出现的次数了。

(c)搜索指定范围的数字。比如查询包包含540-600的行。

grep '5[4-9][0-9]\|600' [filename...] 

之所以竖杠|需要加上反斜杠进行转义,是因为竖杠|在shell中是特殊字符,表示管道命令。可以使用-e选项显示指明为正则表达式,则不需要对|进行转义。

(2)在当前目录下的所有文件中搜索字符串”lvlv”,并明确要求搜索子目录中的所有文件。

grep -r "lvlv" ./

(3)显示所有以d开头的文件中包含test的行。

grep 'test' d*

(4)打印在aa,bb,cc文件中匹配test的行,并显式行号。

grep -n 'test' aa bb cc

(5)打印aa中包含有至少5个连续小写字符的字符串的所有行

grep '[a-z]\{5\}' aa

注意,这里必须使用双引号或者单引号将查找pattern包围。单引号与双引号的区别主要有: (1)单引号”是全引用,被单引号括起的内容不管是常量还是变量都不会发生替换; (2)双引号”“是部分引用,被双引号括起的内容常量还是常量,变量则会发生替换,替换成变量的内容。一般常量用单引号”括起,如果含有变量则用双引号”“括起来。但是也有意外,比如说查找特殊字符反斜杠\使用:grep '\' ./*则会报grep: Trailing backslash错误,需要使用grep '\\' ./*才可以。

(6)统计文件file中含有指定字符串aaa的的行数。

grep aaa file | wc -l

注意: grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。


参考文献

[1]man grep [2][Linux]知其然且知所以然之grep命令

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Linux命令(32)——grep命令

    grep(Globally search a Regular Expression and Print)是GNU开发的一款免费开源的文本搜索工具。grep家族包...

    Dabelv
  • MySQL导入csv、excel或者sql文件

    上面的csv文件以’,’逗号作为分割符,需要用双引号或者单引号括起来。如果是以’\t’制表符作为分隔符的话,可不用显示指明域分割符。

    Dabelv
  • 二路归并排序简介及其并行化

    归并排序是分治法(Divide and Conquer)的一个典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若...

    Dabelv
  • 快速找到OEACLE的性能问题

    对于传统应用系统,一旦系统性能测试达标上线后,后续出现性能恶化除了业务徒增之外,十有八九都是数据库惹的祸。通过快速的业务量比对排除异常后,重点的问题排查就要放到...

    企鹅号小编
  • 3分钟短文 | PHP极速匹配子字符串,你是怎么做的?

    在项目开发中我们经常会遇到这样的需求,比如用户提交的表单中含有一些文本的内容。我们需要在后台为其进行关键词过滤处理。

    程序员小助手
  • [享学Netflix] 二十一、Hystrix指标数据收集(预热):滑动窗口算法(附代码示例)

    代码下载地址:https://github.com/f641385712/netflix-learning

    YourBatman
  • scp(安全拷贝)和rsync(增量复制)

    要求: 用户名A@主机名1 对path1有读权限 用户名B@主机名2 对path2有写权限

    爱学习的孙小白
  • mall整合SpringBoot+MyBatis搭建基本骨架

    https://github.com/macrozheng/mall-learning/tree/master/mall-tiny-01

    macrozheng
  • 新的隐私保护对于云业务可能意味着什么

    想象一下,如果IT人员或所在的公司在云端或其他SaaS(存储即服务)平台上存储有争议的信息,并且突然之间,美国联邦调查局或警方因此将其扣押。一夜之间,其或其所在...

    静一
  • github仓库上的漏洞修复

    版权声明:本文为博主汪子熙原创文章,未经博主允许不得转载。 https://jerry.bl...

    Jerry Wang

扫码关注云+社区

领取腾讯云代金券