00. 目录

文章目录

  • 00. 目录
  • 01. 命令概述
  • 02. 命令格式
  • 03. 常用选项
  • 04. 参考示例
  • 05. 附录

01. 命令概述

Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。

grep命令的选项用于对搜索过程的补充,而其命令的模式十分灵活,可以是变量、字符串、正则表达式。需要注意的是:一当模式中包含了空格,务必要用双引号将其引起来。

linux系统支持三种形式的grep命令,大儿子就是grep,标准,模仿的代表。二儿子兴趣爱好多-egrep,简称扩展grep命令,其实和grep -E等价,支持基本和扩展的正则表达式。小儿子跑的最快-fgrep,简称快速grep命令,其实和grep -F等价,不支持正则表达式,按照字符串表面意思进行匹配。

02. 命令格式

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

03. 常用选项

匹配模式选择:-E, --extended-regexp     扩展正则表达式egrep-F, --fixed-strings       一个换行符分隔的字符串的集合fgrep-G, --basic-regexp        基本正则-P, --perl-regexp         调用的perl正则-e, --regexp=PATTERN      后面根正则模式,默认无-f, --file=FILE           从文件中获得匹配模式-i, --ignore-case         不区分大小写-w, --word-regexp         匹配整个单词-x, --line-regexp         匹配整行-z, --null-data           一个 0 字节的数据行,但不是空行杂项:-s, --no-messages         不显示错误信息-v, --invert-match        显示不匹配的行-V, --version             显示版本号--help                    显示帮助信息--mmap                use memory-mapped input if possible输入控制:-m, --max-count=NUM       匹配的最大数-b, --byte-offset         打印匹配行前面打印该行所在的块号码。-n, --line-number         显示的加上匹配所在的行号--line-buffered           刷新输出每一行-H, --with-filename       当搜索多个文件时,显示匹配文件名前缀-h, --no-filename         当搜索多个文件时,不显示匹配文件名前缀--label=LABEL            print LABEL as filename for standard input-o, --only-matching       只显示一行中匹配PATTERN 的部分-q, --quiet, --silent      不显示任何东西--binary-files=TYPE   假定二进制文件的TYPE 类型;TYPE 可以是`binary', `text', 或`without-match'-a, --text                匹配二进制的东西-I                        不匹配二进制的东西-d, --directories=ACTION  目录操作,读取,递归,跳过-D, --devices=ACTION      设置对设备,FIFO,管道的操作,读取,跳过-R, -r, --recursive       递归调用--include=PATTERN     只查找匹配FILE_PATTERN 的文件--exclude=PATTERN     跳过匹配FILE_PATTERN 的文件和目录--exclude-from=FILE   跳过所有除FILE 以外的文件-L, --files-without-match 匹配多个文件时,显示不匹配的文件名-l, --files-with-matches  匹配多个文件时,显示匹配的文件名-c, --count               显示匹配的行数-Z, --null                在FILE 文件最后打印空字符文件控制:-B, --before-context=NUM  打印匹配本身以及前面的几个行由NUM控制-A, --after-context=NUM   打印匹配本身以及随后的几个行由NUM控制-C, --context=NUM         打印匹配本身以及随后,前面的几个行由NUM控制-NUM                      根-C的用法一样的--color[=WHEN],--colour[=WHEN]       使用标志高亮匹配字串;-U, --binary               使用标志高亮匹配字串;-u, --unix-byte-offsets   当CR 字符不存在,报告字节偏移(MSDOS 模式)规则表达式:
grep的规则表达式:^  #锚定行的开始 如:'^grep'匹配所有以grep开头的行。
$  #锚定行的结束 如:'grep$'匹配所有以grep结尾的行。
.  #匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。
*  #匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。
.*   #一起用代表任意字符。
[]   #匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。
[^]  #匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。
\(..\)  #标记匹配字符,如'\(love\)',love被标记为1。
\<      #锚定单词的开始,如:'\<grep'匹配包含以grep开头的单词的行。
\>      #锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。
x\{m\}  #重复字符x,m次,如:'0\{5\}'匹配包含5个o的行。
x\{m,\}  #重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。
x\{m,n\}  #重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5--10个o的行。
\w    #匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。
\W    #\w的反置形式,匹配一个或多个非单词字符,如点号句号等。
\b    #单词锁定符,如: '\bgrep\b'只匹配grep。  POSIX字符:
为了在不同国家的字符编码中保持一至,POSIX(The Portable Operating System Interface)增加了特殊的字符类,如[:alnum:]是[A-Za-z0-9]的另一个写法。要把它们放到[]号内才能成为正则表达式,如[A- Za-z0-9]或[[:alnum:]]。在linux下的grep除fgrep外,都支持POSIX的字符类。[:alnum:]    #文字数字字符
[:alpha:]    #文字字符
[:digit:]    #数字字符
[:graph:]    #非空字符(非空格、控制字符)
[:lower:]    #小写字符
[:cntrl:]    #控制字符
[:print:]    #非空字符(包括空格)
[:punct:]    #标点符号
[:space:]    #所有空白字符(新行,空格,制表符)
[:upper:]    #大写字符
[:xdigit:]   #十六进制数字(0-9,a-f,A-F)

04. 参考示例

4.1 文件中搜索一个单词

[deng@localhost share]$ grep "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[deng@localhost share]$

4.2 多文件中查找单词

[deng@localhost test]$ grep "root" passwd passwd1
passwd:root:x:0:0:root:/root:/bin/bash
passwd:operator:x:11:0:operator:/root:/sbin/nologin
passwd1:root:x:0:0:root:/root:/bin/bash
passwd1:operator:x:11:0:operator:/root:/sbin/nologin
[deng@localhost test]$

4.3 输出除匹配之外的所有行

[deng@localhost test]$ grep -v "root" /etc/passwd

4.4 匹配部分颜色显示

[deng@localhost test]$ grep "root" /etc/passwd --color=auto
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[deng@localhost test]$

4.5 使用正则表达式

[deng@localhost test]$ grep -E "[1-9]+" /etc/passwd

或者

[deng@localhost test]$ egrep "[1-9]+" /etc/passwd

4.6 只输出文件中匹配到的部分

[deng@localhost test]$ grep -o "root" /etc/passwd
root
root
root
root
[deng@localhost test]$

4.7 统计文件或者文本中包含匹配字符串的行数

[deng@localhost test]$ grep -c "root" /etc/passwd
2

4.8 输出包含匹配字符串的行号

[deng@localhost test]$ grep -n "root" /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
[deng@localhost test]$

多个文件匹配情况

[deng@localhost test]$ grep -n "root" passwd passwd1
passwd:1:root:x:0:0:root:/root:/bin/bash
passwd:10:operator:x:11:0:operator:/root:/sbin/nologin
passwd1:1:root:x:0:0:root:/root:/bin/bash
passwd1:10:operator:x:11:0:operator:/root:/sbin/nologin
[deng@localhost test]$

4.9 输出字符或字节偏移

-b显示字符或者字节偏移

[deng@localhost test]$ grep -b -o "root" /etc/passwd
0:root
11:root
17:root
366:root
[deng@localhost test]$

4.10 搜索多个文件并输出查找匹配文本文件

[deng@localhost test]$ grep -l "root" passwd passwd1
passwd
passwd1
[deng@localhost test]$

4.11 在多级目录中对文本进行递归搜索

[deng@localhost test]$ grep -r "root" /etc

4.12 忽略大小写搜索

[deng@localhost test]$ grep -i "ROOT" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[deng@localhost test]$

4.13 同时指定多个匹配的字符串

[deng@localhost test]$ grep -e "root" -e "deng" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
deng:x:1000:1000:deng:/home/deng:/bin/bash
[deng@localhost test]$

4.14 在grep搜索结果中包括或者排除指定文件

在目录中所有的.php和.html文件中递归搜索字符"main"

[deng@localhost test]$ grep -r "main" ./ --include *.{php,html}

搜索结果中排除所有README文件

[deng@localhost test]$ grep -r "main" ./ --exclude "README"

搜索结果中排除filelist文件列表里的文件

[deng@localhost test]$ grep -r "main" ./ --exclude-from filelist

4.15 不显示任何东西

[deng@localhost test]$ grep -q "root" /etc/passwd

4.16 使用0值字节后缀的grep与xargs

#测试文件:
echo "aaa" > file1
echo "bbb" > file2
echo "aaa" > file3grep "aaa" file* -lZ | xargs -0 rm#执行后会删除file1和file3,grep输出用-Z选项来指定以0值字节作为终结符文件名(\0),xargs -0 读取输入并用0值字节终结符分隔文件名,然后删除匹配文件,-Z通常和-l结合使用。

4.17 打印出匹配文本之前或者之后的行

显示匹配某个结果之后的3行,使用 -A 选项

[deng@localhost test]$ seq 1 10 | grep "5" -A 3
5
6
7
8
[deng@localhost test]$

显示匹配某个结果之前的3行,使用 -B 选项

[deng@localhost test]$ seq 1 10 | grep "5" -B 3
2
3
4
5
[deng@localhost test]$

显示匹配某个结果的前三行和后三行,使用 -C 选项

[deng@localhost test]$ seq 1 10 | grep "5" -C 3
2
3
4
5
6
7
8
[deng@localhost test]$

匹配结果有多个,会用“–”作为各匹配结果之间的分隔符

[deng@localhost test]$ echo -e "a\nb\nc\na\nb\nc" | grep a -A 1
a
b
--
a
b

4.18 查找一个文件中的空行和非空行

统计文件中空行的行数

[deng@localhost test]$ grep -c ^$ /etc/passwd

统计文件中非空行的行数

[deng@localhost test]$ grep -c ^[^$] /etc/passwd
46
[deng@localhost test]$

4.19 输出所有以root开头的行

[deng@localhost test]$ grep ^root /etc/passwd
root:x:0:0:root:/root:/bin/bash
[deng@localhost test]$

4.20 输出所有以bash结尾的行

[deng@localhost test]$ grep bash$ /etc/passwd
root:x:0:0:root:/root:/bin/bash
deng:x:1000:1000:deng:/home/deng:/bin/bash
oracle:x:1001:1002::/home/oracle:/bin/bash
itcast:x:1002:1003::/home/itcast:/bin/bash
[deng@localhost test]$

4.21 从文件中读取关键字搜索

[deng@localhost test]$ grep -f file /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[deng@localhost test]$ cat file
root
[deng@localhost test]$

说明:输出/etc/passwd文件中含有从file文件中读取出的关键词的内容行

4.22 支持正则表达式

显示当前目录下面以.txt 结尾的文件中的所有包含每个字符串至少有7个连续小写字符的字符串的行

[deng@localhost test]$ grep '[a-z]\{7\}'  *.txt

4.23 显示所有匹配root和deng的行

[deng@localhost test]$ grep -E "root|deng" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
deng:x:1000:1000:deng:/home/deng:/bin/bash
[deng@localhost test]$

4.24 匹配IP地址

X\{m,n\} 匹配字符X m—n 次

[deng@localhost test]$ ifconfig ens33 |grep "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}"inet 192.168.1.104  netmask 255.255.255.0  broadcast 192.168.1.255
[deng@localhost test]$

4.25 匹配root或者deng或者itcast

[deng@localhost test]$ grep '\(root\|deng\|itcast\)' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
deng:x:1000:1000:deng:/home/deng:/bin/bash
itcast:x:1002:1003::/home/itcast:/bin/bash
[deng@localhost test]$

4.26 X\{m,\} 匹配字符X 最少m次

[deng@localhost test]$ grep 'o\{2,\}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
setroubleshoot:x:994:991::/var/lib/setroubleshoot:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
[deng@localhost test]$

4.27 X\{m\}匹配字符X m次

[deng@localhost test]$ grep 'o\{2\}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
setroubleshoot:x:994:991::/var/lib/setroubleshoot:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
[deng@localhost test]$

4.28 \+ 匹配前面的字符或者字符串1次或者多次

[deng@localhost test]$ grep 'root\+' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

4.29 ? 匹配前面的字符或者字符串0 次或者 多次

[deng@localhost test]$ grep 'root\?' /etc/passwd
[deng@localhost test]$ grep 'root\?' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[deng@localhost test]$

4.30 \用来屏蔽元字符的特殊含义

//匹配.
[deng@localhost test]$ ifconfig  ens33 | grep '\.'inet 192.168.1.104  netmask 255.255.255.0  broadcast 192.168.1.255RX packets 102516085  bytes 13627338339 (12.6 GiB)TX packets 145027  bytes 41135471 (39.2 MiB)
[deng@localhost test]$

4.31 匹配 [ ]内的字符

如 [ 1] 即匹配含有字符’1’的字符串

[deng@localhost test]$ grep [1] /etc/passwd

如 [ a] 即匹配含有字符’a’的字符串

[deng@localhost test]$ grep '[a]' /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin

如 [123] 即匹配含有字符’1’ 或者 ’2’ 或者’3’ 的字符串

[deng@localhost test]$ grep '[123]' /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin

也可以使用字符序列,用字符 ‘-’ 代表字符序

如 [ 1-3 ] 即匹配含有字符’1’ 或者 ’2’ 或者’3’ 的字符串

[deng@localhost test]$ grep '[1-3]' /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

如 [ 1-3 a-b] 即匹配含有字符’1’ 或者 ’2’ 或者’3’ 或者 ’a’ 或者 ’b’的字符串

[deng@localhost test]$ grep '[1-3a-b]' /etc/passwd

4.32 .匹配任意的单字符

任意两个字符开头,然后第三个字符为 ‘3’

[deng@localhost test]$ grep '^..3' /etc/passwd

05. 附录

参考:【Linux】一步一步学Linux系列教程汇总

【Linux】一步一步学Linux——grep命令(49)相关推荐

  1. 学linux作用,linux有必要学吗?学linux有什么作用,学linux能干什么

    Linux是一种自由和开放源码的类UNIX操作系统.Linux有必要学吗?学Linux有什么作用,学Linux能干什么?Linux最大的作用就是提高效率.当你习惯在Linux命令行下工作,再回到win ...

  2. LINUX学习之路(学LINUX必看)

    很多同学接触Linux不多,对Linux平台的开发更是一无所知.而现在的趋势越来越表明,作为一 个优秀的软件开发人员,或计算机IT行业从业人员,掌握Linux是一种很重要的谋生资源与手段.下来我将会结 ...

  3. linux学习需要什么基础,学linux需要什么基础?

    近几年来,随着计算机网络的发展,越来越多的人学习 linux.对于想要从事运维工作或者从事智能开发方面的同学来说,学习 linux 是必要的.linux 的学习并不简单,那么这篇文章 w3cschoo ...

  4. 分享--linux 学习之路(学linux必看)

    很多同学接触Linux不多,对Linux平台的开发更是一无所知. 而现在的趋势越来越表明,作为一个优秀的软件开发人员,或计算机IT行业从业人员, 掌握Linux是一种很重要的谋生资源与手段. 下来我将 ...

  5. linux grep -11,11个高级Linux字符类和括号表达式的grep命令

    你是否曾经在你需要的一种局面搜索字符串,文字或图案的文件里面呢? 如果是,那么grep工具来在这样的情况下派上用场. grep的是为其匹配一个正则表达式搜索行纯文本数据的命令行实用程序. 如果您将分词 ...

  6. linux 搜索文件内容 包含某个单词,grep命令 查找包含某内容的文件

    作用 Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正 ...

  7. Linux下查找文件(find、grep命令)

    目录 一.find命令 1.按文件名 2.按文件类型查询 3.按照文件大小查找 4.按照文件日期查找 4.1按照创建日期查找 4.2按照修改日期查找 4.3按照访问日期查找 5.按深度查找 5.1查找 ...

  8. 英语不好学linux运维难吗,学Linux系统难吗?学好Linux运维需要多久

    随着近年来经济的快速发展,企业对Linux人才的需求也越来越高.许多人认为,Linux是一个非常简单的行业,然而,Linux行业是一个综合了云计算.Linux运维.Linux开发.Linux编程等多方 ...

  9. 不会linux的php难找工作,学linux系统难吗

    这是 Linux初学者经常会问的问题,其实Linux和Windows一样都属于操作系统,对于大部分人来说,对Windows操作系统十分熟悉,而对Linux操作系统没有使用过,所以觉得很难,其实,只要熟 ...

最新文章

  1. TP-link 设置MAC地址过滤
  2. 线上学python哪家好-广州学Python学校哪家好
  3. winpython使用教程-如何使用Python自动控制windows桌面
  4. windows平台cl.exe编译pcre 8.13
  5. Python编程语言学习:判断变量是否为NONE或False的几种常见写法(if not用法教程)
  6. 初使用swagger遇到的问题(1)
  7. 深入理解数据库行锁与表锁
  8. python记录日志_5分钟内解释日志记录—使用Python演练
  9. python中怎么判断字母大小写_python判断字符串是字母 数字 大小写(转载)
  10. maven构建Spring项目
  11. Python技巧——list comprehension 与 functools.reduce
  12. 华为服务器软件维护,服务器系统软件维护
  13. BZOJ3876 [Ahoi2014Jsoi2014]支线剧情 【有上下界费用流】
  14. 读取doc文件c语言程序,c语言程序中关于文件的操作.doc
  15. python数据集获取与基本使用(sklearn自带的数据集、UCI数据集)
  16. inovance变频器说明书参数设置_汇川变频器功能参数设置及实操训练
  17. 没有人脉如何靠内推进大厂?内推真的那么神吗?带你搞透内推到底是什么
  18. 鸿蒙系统没有录屏,这15+项高效又实用的功能更新,一定别错过!
  19. 酷狗计算机自动续费,怎么取消酷狗自动续费-APP自动续费关不了?可在微信支付宝这样操作!...
  20. php fpm 开启status,启用php-fpm状态详解

热门文章

  1. Silverlight3 Tools Download link
  2. httpsrequest java_java如何通过https返回数据
  3. 记录webpack的source map使用详细说明
  4. 2011年北京大学计算机研究生机试真题(dijkstra+优先队列)
  5. 从华为“鸿蒙”备胎看IT项目建设
  6. JSON Web Tokens(JWT)
  7. BOM的window对象的属性及其方法
  8. 技术贴:asp.net实现唯一账户在线 禁止同一帐号同时在线 asp.net实现您的帐号在别处登录,您已被迫下线!...
  9. 从n个数中随机选取m个
  10. ckeditor3 在Asp.net MVC2.0环境中的配置