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的更多相关文章

  1. Linux 文本三剑客之 grep

    Linux 系统中一切皆文件. 文件是个文本.可以读.可以写,如果是二进制文件,还能执行. 在使用Linux的时候,大都是要和各式各样文件打交道.熟悉文本的读取.编辑.筛选就是linux系统管理员的必 ...

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

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

  3. Linux文本三剑客总结

    Linux文本处理三剑客 grep 文本过滤(模式:pattern)工具 grep, egrep, fgrep(不支持正则表达式搜索) grep  grep: Global search REgula ...

  4. Linux文本三剑客-grep

    Global search REgular expression and Print out the line 全局搜索正则表达式并打印行 作用: 对标准输入的行进行分析,过滤指定的行. 模式: 格式 ...

  5. 文本三剑客之grep的用法

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

  6. linux中三剑客之一grep命令

    目录 一:grep语法格式: 二:参数: 三:正则表达式 1.linux正则表达式 2.普通正则表达式 四:正则与grep实战案例实战: grep简介: linux 三剑客之一,文本过滤器(根据文本内 ...

  7. Linux文本处理命令 -- grep

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

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

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

  9. Linux文本三剑客

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

随机推荐

  1. JVM_01 简介

    本篇仅仅是JVM的简介,关于更多的JVM细节,请参见本专题JVM: 计算机系统当中的JVM JVM是运行在操作系统之上的,并没有和硬件有直接的交互 Java代码一次编译,到处运行 HotSpot虚拟机 ...

  2. 使用vue-cli(vue脚手架)快速搭建项目-2

    接上一篇文章,这篇文章对如何使用IDEA打开并运行项目做教程 1.将在窗口模式启动的Vue关闭 只需要按住Ctrl+C,输入Y就可以了 2.打开idea 3.复制你项目所在地址,然后点击OK 4.下面 ...

  3. dubbo学习(四)配置dubbo 注解方式配置

    provider(生产者) service注解暴露服务 /** * 用户管理实现类 */ @Service //用的dubbo的注解,表明这是一个分布式服务 @Component //注册为sprin ...

  4. vue +signalR 实现服务端到客户端消息发送

    承接上一篇 上一篇博客实现是了消息的实时通信,这一篇博客主要讲如何从中心服务内部向客户端发送消息. 先看下最终效果: 在core应用程序里加一个控制器TestController 注入控制器中的IHu ...

  5. Laravel驱动管理类Manager的分析和使用

    Laravel驱动管理类Manager的分析和使用 第一部分 概念说明 第二部分 Illuminate\Support\Manager源码 第三部分 Manager类的使用 第一部分:概念解释 结合实 ...

  6. 刷题[HCTF 2018]WarmUp

    解题思路 进入页面之后,一个大大的滑稽. 查看源码 查看源码发现有source.php .打开 发现还有一个hint.php.打开发现 由此可知是代码审计了 解题 代码审计 先看此段代码,大致意思是. ...

  7. Spring AOP系列(二) — 动态代理引言

    接上一篇Spring AOP系列(一)- 代理模式,本篇来聊聊动态代理. 动态代理与静态代理的区别 要想了解动态代理与静态代理的区别,需要有两个前置知识点:java程序是如何执行的以及类加载机制. j ...

  8. java调用Oracle中的存储过程与存储函数

    1 //调用存储过程 2 public static void testPro(){ 3 String driver = "oracle.jdbc.OracleDriver"; 4 ...

  9. Android作业0930

    1.使用ListView和Adapter实现购物商城 Android 布局文件 <?xml version="1.0" encoding="utf-8"? ...

  10. Java知识系统回顾整理01基础03变量03字面值

    一.字面值定义 创建一个Hero对象会用到new关键字,但是给一个基本类型变量赋值却不是用new. 因为基本类型是Java语言里的一种内置的特殊数据类型,并不是某个类的对象.  给基本类型的变量赋值的 ...