grep命令

作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行。

模式::由正则表达式字符及文本字符所编写的过滤条件

语法:grep [OPTIONS] PATTERN [FILE...]

常用选项:

--color=auto     #对匹配到的文本着色显示 ,系统默认将grep别名设置为:grep='grep --color=auto'

-m #        #只显示匹配到的#行

-v        #显示不被pattern匹配到的行

-i        #忽略字符大小写

-n        #显示匹配的行号

-c        #统计匹配的行数

-o        #仅显示匹配到的字符串

-q        #静默模式,不输出任何信息

-A        #显示匹配到行的后几行

-B        #显示匹配到行的前几行

-C        #显示匹配到的行的前后几行

-e        #实现多个选项间的逻辑or关系

-w       #匹配整个单词

-E         #使用ERE

-F       #相当于fgrep,不支持正则表达式

-f           #file 根据模式文件处理

正则表达式

REGEXP:由一类特殊字符及文本字符所编写的模式, 其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能

分为两大类,基本的正则表达式和扩展的正则表达式,二者元字符的区别如下:

1、基本正则表达式元字符

^  #如果在[]外则表示以某个字符开头,如果在[]内,则表示除某些字符以外

$  #表示以某个字符结尾

.   #表示匹配任意一个字符

*   #表示匹配前面字符任意次

[]   #表示匹配括号内的多个字符中的任意一个

.*   #表示匹配所有

[^]  #表示匹配除括号内以外的所有字符

^$  #表示匹配空行信息

\     #将含有特殊含义的字符转义为原字符的含义

2、扩展的正则表达式

+    #表示前面字符出现一次或一次以上

?   #表示前面字符出现0次或一次以上

|   #表示或者的关系,匹配多个信息

()    #匹配一个整体信息,可以进行后项引用

{}    #定义前面的字符出现的次数

除此之外正则表达式也支持下面的元字符:

[:alnum:] 字母和数字

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

[:lower:] 小写字母

[:upper:] 大写字母

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

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

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

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

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

[:print:] 可打印字符

[:punct:] 标点符号

一、grep常用选项

举例1:grep查找root关键字,且显示匹配到的第一行

观察以上三条命令的区别,不加-m选项,则默认显示匹配到的所有的行,加了-m选项则只显示-m指定的行数

举例2:显示文档中除shenzhen以外的所有的行

通过以上结果可知,当加上-v选项后,shenzhen所在的那行不再被显示

举例3:不区分大小写查找文档中的shenzhen字符

当加上-i选项后,grep查找时,不区分关键字的大小写

举例4:查找shenzhen字符并显示出字符在文档中的行数

加上-n选项后,会在关键词所在行的行首显示出关键词在文档中的行数

举例5:统计文档中含有shenzhen字符的所有行的数量

加上-c选项后,会统计包含shenzhen字符的行数

举例6:仅显示匹配到的字符

加上-o选项不会显示所匹配到的行,仅显示匹配到的字符

举例7:静默显示,即不输出任何信息

在查询root字符时,不会 输出任何结果,但是会有执行结果

举例8:显示匹配到的行及其后面那一行

加上-A(after)选项,并指定行数为1,则显示的结果为匹配到的行及其后面哪一行

举例9:显示匹配到的行及其前面哪一行

使用-B(before)选项,并指定行数为1,则显示匹配到的行及其前一行

举例10:显示匹配到的行及其前后1行

使用-C选项并指明其行数为1,则显示其匹配到的行以及前后各一行

举例11:匹配多个选项

使用-e选项能实现匹配shenzhen或者longhua的字符的行,并显示到屏幕

举例12:精确匹配到某个单词

不加-w选项,grep默认会显示出所有包含字符的行,加上-w则表示显示匹配到这个单词的行

举例13:通过扩展的正则匹配

由于?只支持扩展的正则表达式,所以需要在前面加上-E选项才能匹配到关键字符

二、grep位置锚定用法:

常用的表达式:

^  #行首锚定,用于模式的最左侧

$  #行尾锚定,用于模式的最右侧

^<pattern>$  #用于模式匹配整行

^$  #匹配空行

^[[:space:]]*$  #匹配空白行

\<或者\b  #词首锚定,用于单词模式的最左侧

\>或者\b  #词尾锚定,用于单词模式的最右侧

\<pattern\>  #匹配整个单词

举例:查找/etc/passwd中以root开头的行

在查找的字符前加^,只显示以该字符开头的行

举例2:查找/etc/passwd中以nologin结尾的行

在要匹配的字符后面加$,则grep会查找出以该字符结尾的所有行

举例3:查找出文档内容中以大写Z开头,并以520结尾的行

举例4:查找出文档中的空行

^$以这两个字符作为关键字符去匹配,意味着此行内没有任何内容,即空行

举例5:找出文档中空白行

从上图可知,^$匹配不了空白行,^[[:space:]]*$的含义为,以空白行开头且中间有任意个空白字符的行

举例6:查找文档中re在词尾的行

此处需要注意的是,用引号将模式给引起来,否则不生效

三、grep匹配次数

\{n\}  #前面的字符重复n次

\{n,\}    #前面的字符重复n次以上

\{m,n\} #前面的字符重复m次以上n次以下

举例1:匹配字符r后面的o出现3次的行

注意观察,标红的字符为匹配到的字符,当连续出现3个o则被匹配

举例2:匹配字符r后面的o出现最少3次,最多4次的行

观察此图和上图的区别,可知上图始终只能标识3个o,此图中则标识3个和4个o

举例3:匹配字符r后的o至少3次以上

举例4:匹配字符r后面的o最多出现3次

上图中,匹配o的次数包括0次,1次,2次,3次

四、分组及后向引用

\(\)将一个或多个字符捆绑在一起,当作一个整体处理,分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部变量中吗,这些变量的命名方式为:\1,\2,\3……

举例:利用grep分组匹配字符

以上将root和admin分别放在\(\)中,则将root分成组1,admin分成组2,后面再次出现重复字符时,可以通过\1和、2代替

五、或者

可以用符号\| 来表示匹配中的或者选项

举例:过滤出文档中Cat或者cat

在上图中\|则表示的是逻辑中的或的意思

正则表达式grep命令的更多相关文章

  1. linux:正则表达式grep命令

    基本语法一个正则表达式通常被称为一个模式(pattern),为用来描述或者匹配一系列符合某个句法规则的字符串. 一.选择:| |   竖直分隔符表示选择,例如"boy|girl"可 ...

  2. NO22 Linux正则表达式--grep命令常用参数

    Linux正则表达式:  一.基础正则第一波字符说明: 示例: 二.基础正则第二波字符说明:  三.基础正则第二波字符说明: 示例:  grep:一般常用参数 示例:+和*  ?和.:  |:  () ...

  3. Linux正则表达式grep与egrep

    grep -io "http:/=[A-Z0-9]\{16\}" ./wsxf.txt >wsxf_urls.txt Linux正则表达式grep与egrep 正则表达式:它 ...

  4. Linux grep命令和正则表达式

    介绍 grep是一个功能强大的文本搜索命令,可以用它来搜索某个文件中是否包含指定的搜索内容,它可以利用正则表达式来做复杂的筛选操作,它还可以为其它命令传输给管道的筛选,比如我们常用到的分析单个进程的操 ...

  5. 快速掌握grep命令及正则表达式

    Linux系统自带了支持拓展正则表达式的 GNU 版本 grep 工具,所有的Linux发行版中均默认安装grep ,grep 命令被用来检索一台服务器或工作站上任何位置的文本信息,如何在 Linux ...

  6. 正则表达式2——grep命令

    grep是Global search Regular Expression and Print out the line的简称. 1. grep命令基本用法 命令格式: grep [选项][模式][文 ...

  7. Linux grep 命令中的正则表达式详解

    在 Linux .类 Unix 系统中我该如何使用 Grep 命令的正则表达式呢? Linux 附带有 GNU grep 命令工具,它支持扩展正则表达式(extended regular expres ...

  8. grep命令及基本正则表达式

    grep命令是Linux系统中一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来. grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功 ...

  9. Linux - 结合正则表达式使用grep命令

    Grep with Regular Expression grep命令基本用法 grep [-acinv] [--color=auto] [-A n] [-B n] '搜寻字符串' 文件名参数说明: ...

随机推荐

  1. Python--day72--json内容回顾

    前后端分离,Json格式字符串:序列化和反序列化 """ 复习python中的json模块 """ import json s = '{&q ...

  2. Adam那么棒,为什么还对SGD念念不忘 (1) —— 一个框架看懂优化算法

    机器学习界有一群炼丹师,他们每天的日常是: 拿来药材(数据),架起八卦炉(模型),点着六味真火(优化算法),就摇着蒲扇等着丹药出炉了. 不过,当过厨子的都知道,同样的食材,同样的菜谱,但火候不一样了, ...

  3. MYSQL设置远程账户登陆总结,mysql修改、找回密码、增加新用户,MySQL数据库的23个注意事项

    1.5 设置及修改Mysql root用户密码1 设置密码方法mysqladmin -u root password '123456'mysqladmin -u root -p'123456' pas ...

  4. 4-3 调试代码命令 scrapy shell http://blog.jobbole.com/114496/(入口url)

    调试代码命令 scrapy shell http://blog.jobbole.com/114496/(入口url)

  5. linux中添加常用应用程序的桌面图标

    在网上随处可以找到怎么样把应用程序的图标放到桌面上,我刚用ubuntu时也是按照网上的做法,一步一步的做的,现将网上的做法复制下来: 桌面配置文件简述\label{sec:desktop file} ...

  6. 2019-11-19-C#-高级面试题

    title author date CreateTime categories C# 高级面试题 lindexi 2019-11-19 08:40:50 +0800 2018-11-12 11:18: ...

  7. Linux 字节序

    小心不要假设字节序. PC 存储多字节值是低字节为先(小端为先, 因此是小端), 一些高 级的平台以另一种方式(大端)工作. 任何可能的时候, 你的代码应当这样来编写, 它不在 乎它操作的数据的字节序 ...

  8. 【Kubernetes】部署K8s-dashboard v1.10.1

    一.官方kubernetes-dashboard.yaml简介 ①首先认识一下官方的kubernetes-dashboard.yaml,我们先下载: https://github.com/kubern ...

  9. 关于oppo和vivo这两年强势崛起的反思

    先来谈谈配置吧(小白跳过) oppo产品线 r7 67522015年05月3g2320mAh r7 p 6795 6153g4100mAh r7s 616 67522015年10月4g 3070mAh ...

  10. 011.MFC_Slider

    滑块CSliderCtrl 常用函数SetLineSize() GetLineSize() SetPageSize() GetPageSize()SetRangeMax() GetRangeMax() ...