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

grep [options] PATTERN [FILE...]

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

其中, Egrep 与 grep -E 相同; Fgrep 与 grep -F 相同。

参数选项(整理自man手册):

-A NUM, --after-context=NUM

打印出紧随匹配的行之后的下文 NUM 行。在相邻的匹配组之间将会打印内容是 -- 的一行;

-a, --text

将一个二进制文件视为一个文本文件来处理;它与 --binary-files=text 选项等价;

-B NUM, --before-context=NUM

打印出匹配的行之前的上文 NUM 行。在相邻的匹配组之间将会打印内容是 -- 的一行;

-C NUM, --context=NUM

打印出匹配的行的上下文前后各 NUM 行。在相邻的匹配组之间将会打印内容是 -- 的一行;

-b, --byte-offset

在输出的每行前面同时打印出当前行在输入文件中的字节偏移量;

--binary-files=TYPE

如果一个文件的起始几个字节表明文件包含二进制数据,那么假定文件是TYPE类型的。默认情况下,TYPE 是binary,并且 grep一般会输出一个一行的消息说一个二进制文件匹配,或者如果没有匹配的话就没有消息输出;

--colour[=WHEN], --color[=WHEN]

在匹配的行周围以 GREP_COLOR 环境变量中指定的记号来标记。WHEN 可以是 `never', `always', 或是 `auto';

-c, --count

禁止通常的输出;作为替代,为每一个输入文件打印一个匹配的行的总数;

-D ACTION, --devices=ACTION

如果输入文件是一个设备,FIFO 或是套接字(socket),使用动作 ACTION 来处理它。默认情况下,动作ACTION是read,意味着设备将视为普通文件那样来读。如果动作 ACTION是skip,将不处理而直接跳过设备;

-d ACTION, --directories=ACTION

如果输入文件是一个目录,使用动作 ACTION 来处理它。默认情况下,动作 ACTION 是 read ,意味着目录将视为普通文件那样来读。如果动作 ACTION 是skip,将不处理而直接跳过目录。如果动作ACTION 是 recurse,grep 将递归地读每一目录下的所有文件。这样做和-r选项等价;

-E, --extended-regexp

将模式 PATTERN 作为一个扩展的正则表达式来解释;

-e PATTERN, --regexp=PATTERN

使用模式 PATTERN 作为模式;在保护以 - 为起始的模式时有用;

-F, --fixed-strings

将模式 PATTERN 视为一个固定的字符串的列表,用新行 (newlines) 分隔,只要匹配其中之一即可;

-P, --perl-regexp

将模式 PATTERN 作为一个 Perl 正则表达式来解释;

-f FILE, --file=FILE

从文件 FILE 中获取模式,每行一个。空文件含有0个模式,因此不匹配任何东西;

-G, --basic-regexp

将模式 PATTERN 作为一个基本的正则表达式 (参见下面) 来解释。这是默认值;

-H, --with-filename

为每个匹配打印文件名;

-h, --no-filename

当搜索多个文件时,禁止在输出的前面加上文件名前缀;

--help

输出一个简短的帮助信息;

-I

处理一个二进制文件,但是认为它不包含匹配的内容。这和 --binary-files=without-match 选项等价

-i, --ignore-case

忽略模式 PATTERN 和输入文件中的大小写的分别

-L, --files-without-match

禁止通常的输出;作为替代,打印出每个在通常情况下不会产生输出的输入文件的名字。对每个文件的扫描在遇到第一个匹配的时候就会停止;

-l, --files-with-matches

禁止通常的输出;作为替代,打印出每个在通常情况下会产生输出的输入文件的名字。对每个文件的扫描在遇到第一个匹配的时候就会停止;

-m NUM, --max-count=NUM

在找到NUM个匹配的行之后,不再读这个文件。如果输入是来自一个普通文件的标准输入,并且已经输出了NUM个匹配的行,grep保证标准输入被定位于退出时的最后一次匹配的行之后,不管是否指定了要输出紧随的下文的行。这样可以使一个调用程序恢复搜索。当 grep 在NUM个匹配的行之后停止,它会输出任何紧随的下文的行。当使用了-c或--count选项的时候,grep不会输出比NUM更多的行。当指定了-v或--invert-match 选项的时候, grep 会在输出NUM个不匹配的行之后停止;

--mmap

如果可能的话,使用mmap(2)系统调用来读取输入,而不是默认的read(2)系统调用。在一些情况下, --mmap提供较好的性能。但是,如果一个输入文件在grep正在操作时大小发生变化,或者如果发生了一个 I/O 错误, --mmap 可能导致不可知的行为 (包括core dumps);

-n, --line-number

在输出的每行前面加上它所在的文件中它的行号;

-o, --only-matching

只显示匹配的行中与 PATTERN 相匹配的部分;

--label=LABEL

将实际上来自标准输入的输入视为来自输入文件 LABEL 。这对于 zgrep 这样的工具非常有用,例如: gzip -cd foo.gz |grep --label=foo something;

--line-buffering

使用行缓冲,it can be a performance penality;

-q, --quiet, --silent

不向标准输出写任何东西。如果找到任何匹配的内容就立即以状态值 0 退出,即使检测到了错误。 参见 -s 或 --no-messages 选项;

-R, -r, --recursive

递归地读每一目录下的所有文件。这样做和 -d recurse 选项等价;

--include=PATTERN

仅仅在搜索匹配 PATTERN 的文件时在目录中递归搜索

--exclude=PATTERN

在目录中递归搜索,但是跳过匹配 PATTERN 的文件

-s, --no-messages

禁止输出关于文件不存在或不可读的错误信息。 对于可移植性需要注意:与 GNU grep 不同,传统的 grep 不遵守 POSIX.2 规范,因为传统的 grep 缺少一个 -q 选项,而它的 -s 选项与 GNU grep 的-q 选项行为相似。需要可移植到传统 grep 的 shell 脚本应当避免使用 -q 和 -s 选项,而应当将输出重定向到 /dev/null ;

-U, --binary

将文件视为二进制。默认情况下,在 MS-DOS 和 MS-Windows 系统中, grep 通过从文件中读取头部的 32kB 内容来判断它的文件类型。如果 grep 判断文件是一个文本文件,它将原始文件内容中的CR字符去除(使得含有^ 和 $的正则表达式可以正常工作)。指定 -U 将不进行这些工作,而使所有文件保持不变地读取并传递给匹配机制。如果文件是一个以 CR/LF换行的文本文件,这样作将导致一些正则表达式失败;

-u, --unix-byte-offsets

报告Unix风格的字节偏移量。这个开关使得grep报告字节偏移量时,将文件作为Unix 风格的文本文件看待,也就是说将CR字符去掉。这将产生与在一台Unix主机上运行grep完全相同的结果。除非同时使用 -b 选项,否则这个选项无效;

-V, --version

向标准错误输出打印 grep 的版本号;

-v, --invert-match

改变匹配的意义,只选择不匹配的行;

-w, --word-regexp

只选择含有能组成完整的词的匹配的行。判断方法是匹配的子字符串必须是一行的开始,或者是在一个不可能是词的组成的字符之后。与此相似,它必须是一行的结束,或者是在一个不可能是词的组成的字符之前。词的组成字符是字母,数字,还有下划线;

-x, --line-regexp

只选择能匹配完整一行的匹配;

-Z, --null

输出一个全零字节而不是一般情况下输出在文件名之后的字符。例如,grep -lZ

在每个文件名之后输出一个全零字节而不是普通的新行符。这个选项使得输出清楚明白,即使文件名的表示中包含特殊字符比如新行符。这个选项可以与命令 find -print0, perl -0, sort -z, 和 xargs -0 一起使用,来处理任意的文件名,即使是那些含有新行符的文件名;

正则表达式匹配扩展,整理来自网上

字符匹配

. 表示任意内容

[mage] 指定内容的范围 m或a或g或e

[^mage] 除m及a及g及e

[:alnum:] 字母和数字

[:alpha:] 代表任何英文大小写字符,亦即A-Z, a-z

[:lower:] 小写字母[:upper:] 大写字母

[:blank:] 空白字符(空格和制表符)

[:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广)

[:cntrl:] 不可打印的控制字符(退格、删除、警铃...)

[:digit:] 十进制数字[:xdigit:]十六进制数字

[:graph:]可打印的非空白字符

[:print:] 可打印字符

[:punct:] 标点符号

匹配次数

* 表示前面的字符匹配任意次,可以0次,可以无限,贪婪模式

.* 表示任意内容任意长度

\? 表示前面的内容匹配0次或1次

\+ 表示前的的内容匹配1次以上

\{n\}匹配前面的字符n次

\{m,n\}匹配前面的字符至少m次,至多n次

\{,n\}匹配前面的字符至多n次

\{n,\}匹配前面的字符至少n次

位置锚定

^ 用于模式最左侧

$ 用于模式最右侧

^PATTERN$ 用于模式匹配整行

^$ 空行

^[[:space:]]*$ 空白行或包含tab字符的行

\< 或 \b 词首锚定,用于单词模式的锚定

\> 或 \b 词尾锚定,用于单词模式的锚定

\1 后向引用,1代表引用前面第一个分组

\(\) 将一个或多个字符捆在一起重复列出

注意:如果.符号具有其他意义,必须要使用转义字符(\)来加以解除其特殊意义

使用示例:

1.显示/proc/meminfo文件中以大写或小写s开头的行

grep "^[sS]" /proc/meminfo

grep -i "^sS" /proc/meminfo

grep -E "^(s|S)" /proc/meminfo

grep -E "^s|^S" /proc/meminfo

2.显示/etc/passwd文件中不以/bin/bash结尾的行

grep -v "/bin/bash$" /etc/passwd

3.找出“netstat -tan”命令结果中以LISTEN后跟任意多个空白字符结尾的行

netstat -tan|grep 'LISTEN[[:space:]]*$'

4.利用df和grep,取出磁盘各分区利用率,并从大到小排序

df | grep /dev/sd |grep -o "[0-9]\{1,3\}" |sort -n -r

5.统计last命令中以root登录的每个主机IP地址登录次数

last | grep root | grep '\([0-9]\{1,3\}.\)\{3\}[0-9]\{1,3\}' -o | sort | uniq -c

6.找出/etc/passwd中的两位或三位数

grep "[0-9]\{2,3\}" /etc/passwd

7.显示所有系统用户的用户名和UID

grep "^[a-z]\{1,\}:[0-9]\{,3\}" /etc/passwd | cut -d: -f1,3

Linux文本三剑客超详细教程---grep、sed、awk

awk.grep.sed是linux操作文本的三大利器,合称文本三剑客,也是必须掌握的linux命令之一.三者的功能都是处理文本,但侧重点各不相同,其中属awk功能最强大,但也最复杂.grep更适合单 ...

文本三剑客之grep的用法

第1章         正则表达式 1.1    正则表达式的介绍               正则是用来过滤文件内容               为处理大量文本|字符串而定义的一套规则和方法.    ...

Linux文本处理命令 -- grep

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

文本三剑客之grep及正则表达式

1.grep 1. 什么是grep.egrep和fgrep Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来(匹配到的标红).grep全称是Glo ...

Linux文本三剑客

grep 文本过滤工具. 作用: 文本搜索工具,根据用户指定的行进行匹配检查,打印匹配到的行. 模式: 由正则表达式字符及文本字符所编写的过滤条件. grep的使用 语法:  grep [OPTION ...

Linux 文本处理工具grep,sed,awk

grep.sed和awk都是文本处理工具,虽然都是文本处理工具单却都有各自的优缺点,一种文本处理命令是不能被另一个完全替换的,否则也不会出现三个文本处理命令了.只不过,相比较而言,sed和awk功能更 ...

文本三剑客之grep

接受正则表达式,按行匹配,将会过滤出匹配的所有行 格式: grep   [OPTION]...     PATTERN    [FILE]... 可以看出,grep后可以同时接多个文件 选项OPTIO ...

linux三剑客之grep

linux基础三剑客之grep 1.grep命令 基本介绍 grep命令是文本本过滤工具,是基于一个模式匹配文件的每一行,grep分类:egrep个fgrep. grep英文名:Global  sea ...

Linux文本处理三剑客之grep

简介 grep命令,用于在一个文本文件中或者从STDIN中,根据用户给出的模式(pattern)过滤出所需要的信息. grep以及三剑客中的另外两个工具sed和awk都是基于行处理的,它们会一行行读入 ...

随机推荐

mysql优化笔记之分页

过年闲得蛋疼,于是看看mysql优化,看了网上好多关于分页的优化方法,但是呢,我亲自试上一把的时候,没有出现他们说的现象...难道是我的机器问题么? 下面看看我的实践记录,希望看到的加入进来交流一下O ...

Java,来源于大神

也许你学习了那么久的Java了,但如果有人问你什么是JavaEE?你会怎么回答他呢?在此我来谈谈关于JavaEE的相关技术.(仅是个人见解) 在谈JavaEE时,我们首先来了解一下Java平台.目前, ...

Java怎么实现多继承的功效

Java不支持多继承,但是通过一些巧妙的设计来达到和多继承同样的效果  通过接口.内隐类,继承.实现,互相配合,达到多继承的效果  1.Java中一个类不能继承多个具体class.  2.一个类只可继 ...

阻止文件不被上传到iCloud-b

有空用下 http://www.cocoachina.com/bbs/read.php?tid=86244 http://www.ooso.net/archives/617 http://blog.c ...

树莓派3B&plus;&lpar;三&rpar;

上一篇中,我们配置好了基本的raspbain系统,接下来我们可以用xrdp或者vnc在Windows上远程连接树莓派. 一.安装xrdp xrdp和vnc是两种常见的远程桌面协议,可以进行可视化界面远 ...

python-django开发学习笔记二

1.简述 1.1 开发环境 该笔记所基于的开发环境为:windows8.python2.7.5.psycopg2-2.4.2.django1.5.4.pyCharm-2.7.3.以上所描述的软件.插件 ...

html视频背景

视频作为网页背景的限制因素 在动手编码实现前,视频作为网页背景的有些问题我们要先考虑清楚: 并不是因为技术上可行你就可以任意使用:作为背景的视频内容必须能增强页面内容的感染力,而不是因为漂亮或技术上很 ...

Hibernate 单项一对多的关联映射

在上一篇中我们简单介绍了多对一的关联映射,本文介绍hibernate中一对多的关联映射. 1.设计表结构 虽然关联关系由多对一变为一对多,但是我们表结构不会发生改变,只是指向变了. 2.创建stude ...

MongDB集群部署

http://blog.csdn.net/luonanqin/article/details/8497860 参数解释: dbpath:数据存放目录 logpath:日志存放路径 pidfilepat ...

linux文本三剑客演讲稿,linux文本三剑客之grep相关推荐

  1. linux图形图像三剑客,就linux三剑客简单归纳

    就linux三剑客简单归纳:1:awk 习题1:用 awk 中查看服务器连接状态并汇总 netstat-an|awk '/^tcp/{++s[$NF]}END{for(a in s)print a,s ...

  2. linux(六)之文本操作

    接下来我们一起来看一下再linux中怎么去对文本进行操作的 一.文本文件 既然要操作文本,所以我们要对文本有一个了解,那什么是文本文件呢. 文本文件是一种由若干行字符构成的计算机文件.文本文件存在于计 ...

  3. Linux入门-7 Linux管道、重定向以及文本处理

    Linux管道.重定向以及文本处理 1 Linux多命令协作:管道及重定向 管道和重定向 2 Linux命令行文本处理工具 文件浏览 基于关键字搜索-grep 基于列处理文本-cut 文本统计-wc ...

  4. Linux下使用Vim粘贴文本错乱问题解决

    Linux下使用Vim粘贴文本错乱问题解决 参考文章: (1)Linux下使用Vim粘贴文本错乱问题解决 (2)https://www.cnblogs.com/wangxiaobei2019/p/12 ...

  5. 如何在Linux上找到包含特定文本的所有文件?

    我正在尝试找到一种方法来扫描整个Linux系统,查找包含特定文本字符串的所有文件. 只是为了澄清,我在文件中寻找文本,而不是文件名. 当我查找如何做到这一点时,我遇到了两次这个解决方案: find / ...

  6. linux图形模式切换用户,Linux的图形模式和文本模式以及单用户模式切换

    打开一个终端 输入init 3 (注意init后面有一个空格)  等一会就进入了图形界面 以上方法切换后,窗口模式完全关闭.如果窗口中有文件未保存,将丢失. (用init 5可以回到图形界面,但原来的 ...

  7. linux c语言定位显示字符,Linux c语言实现修改文本字符串

    要在Linux c 程序里面实现文本的字符串读写,百度一下,都是比较简单的字符串处理,并没有类似的说明,后来换成bing 找到一些蛛丝马迹 http://bbs.csdn.net/topics/390 ...

  8. 文本处理利器Linux Awk这样入门☛常见变量的使用

                                Linux awk常见变量初识案例 声明与简介 简介 AWK 是一种处理文本文件的语言,是一个强大的文本分析工具.awk通常用来处理结构化(固定 ...

  9. 教你学会Linux/Unix下的vi文本编辑器

    vi编辑器是Unix/Linux系统管理员必须学会使用的编辑器.看了不少关于vi的资料,终于得到这个总结. 首先,记住vi编辑器的两个模式:1.命令模式 2.编辑模式. 在一个UNIX/Linux的s ...

最新文章

  1. (轉貼) 網路***成詐騙新手法 警方提醒民眾小心 (News)
  2. Power Designer使用技巧
  3. 03系统多界面_【part two】操作说明——系统管理、公司管理、客户管理
  4. MySQL的用户的创建以及远程登录配置
  5. 【风险管理】策略开发流程
  6. RabbitMQ如何实现延迟队列?
  7. cf1553C. Penalty
  8. 前端学习(1522):vue-cli创建项目
  9. stm32读操作失败_STM32学习笔记—通信容易出错的情况
  10. [李景山php]每天TP5-20170125|thinkphp5-Process.php-7
  11. 小米 MIX4 发布、三年要拿下全球第一、还有一只 9999 元的狗?快看 3 个小时雷军都讲了什么!
  12. 三星中文AI助手Bixby发布,现在,这是“一家AI商用技术公司”
  13. 磁盘过热导致 3D32B80D NIM thread blocked故障
  14. php中sisson用法,session用法
  15. 图的存储结构之邻接表(详解)
  16. vb精简版12M大小含msinet.ocx控件
  17. pg数据库中两个字段相除
  18. 飞秋在使用高分辨率的显示器时字体太小,应该这样设置就和以前一样
  19. 华为开放亚太首个OpenDaylight实验室――被纳入OpenDaylight官方Community Labs 获高度肯定
  20. 计算机画图更改,如何用电脑画图功能修改图片与加字

热门文章

  1. 智慧交通道路安全监管云平台解决方案
  2. 苹果ajax跨域,vue中解决axios跨域问题【ajax在vue中的应用】
  3. Python爬取校花网,妈妈再也不会担心我不给她发女朋友照片了
  4. 设计变更时,如何直接在工程图中添加修订信息?
  5. 天鸟技术中台-建设过程-日常经验5:MybatisPlus工具代码封装,between-and封装
  6. web使用panzoom.js 缩放拖拽 工程图cad图
  7. tar解压包的时候出现错误 gzip: stdin: not in gzip format以及tar命令详解
  8. 程序媛征男友需求说明书
  9. Java for Web学习笔记(一一八):【篇外】Soap client
  10. linux php soapclient 认证,php – 401身份验证SoapClient尝试获取模式文...