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. matlab数据插值

    由图可见采样点前段比较稀疏,比较有规律,后段比较密集,比较复杂 这里的spline是三次样条插值 随着次数的增高,曲线在两端震荡的越来越剧烈 用上其他插值的方法 线性插值 最近点插值 分段三次米勒插值 ...

  2. hystrix文档翻译之工作原理

    流程图 下面的图片显示了一个请求在hystrix中的流程图. 1.构造一个HystrixCommand或者HystrixObservableCommand对象 第一步是创建一个HystrixComma ...

  3. 自己实现一个 DFA 串模式识别器(二)

    正规表达式的实现原理 ​ 上文讨论了串的模式的表达,即正规表达式.那么这一小节将讨论我们实现一个正规表达式的方法和原理.因为我们知道,一个正规表达式对应着一个串模式,而一个串模式又对应着一些列符合该模 ...

  4. 项目系统Netty的Channel和用户之间的关系绑定正确做法,以及Channel通道的安全性方案

    前言 考虑一个功能业务,在web程序中向指定的某个用户进行实时通讯 在Web运用的Socket通讯功能中(如在线客服),为保证点对点通讯.而这个看似简单的根据用户寻到起channel通道实际会碰到不少 ...

  5. mysql-python for mac安装过程

    转载:https://yiweifen.com/v-1-338191.html

  6. Django在Linux上uwsgi 与nginx的问题与解决

    1.出现只有weclome to nginx 多半是是nginx的配置文件没有修改,把他的路由注释掉. 我是修改错文件夹了,一直在自己下载而非运行的文件夹修改 2.出现502 出现了多次502这里一一 ...

  7. 基础篇:深入解析JAVA异常

    目录 1 异常的分类和继承关系 2 几种常见异常类的解析 3 Java异常关键字 4 开发过程处理异常注意点 5 异常和AutoCloseable(1.7-JDK的语法糖) 6 throw和throw ...

  8. 这里有一份Java程序员的珍藏书单,请您注意查收

    前言 不要因为迷茫,而停止了脚下前进的路.给大家推荐一份Java程序员必看的书单,豆瓣评分都挺不错的,每一本都值得去读,都值得去收藏,加油呀 本文已经收录到github https://github. ...

  9. Laravel Event的分析和使用

    Laravel Event的分析和使用 第一部分 概念解释 请自行查看观察者模式 第二部分 源码分析 (逻辑较长,不喜欢追代码可以直接看使用部分) 第三部分 使用 第一部分 解释 当一个用户阅读了一篇 ...

  10. Web Storage API的介绍和使用

    目录 简介 浏览器的本地存储技术 Web Storage相关接口 浏览器兼容性 隐身模式 使用Web Storage API 总结 简介 Web Storage为浏览器提供了方便的key value存 ...