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. H5 移动端获取当前位置

    3种方法:1.H5自带的方法,获取经纬度2.通过地图提供的JS.获取位置3.通过微信的API(这个需要公众号 / 小程序) 1.通过H5自带的获取经纬度的方法 优点: 需要引用的资源较少,H5自带的方 ...

  2. 访问HTML可以,访问PHPfile not found

    www目录的所有者和所属组都改为nginx用户试一下. 参考命令: chown nginx.nginx /home/www ps aux |grep nginx   看一下您的nginx是以哪个用户的 ...

  3. H3C IP地址拒绝及释放

  4. Java动态编译优化——提升编译速度(N倍)

    一.前言 最近一直在研究Java8 的动态编译, 并且也被ZipFileIndex$Entry 内存泄漏所困扰,在无意中,看到一个第三方插件的动态编译.并且编译速度是原来的2-3倍.原本打算直接用这个 ...

  5. 【t066】致命的珠宝

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 门上有着N个宝珠,每个宝珠都有一个数字.Mini询问老者后,得知要想打开这扇门,就得找出两颗珠宝,使这 ...

  6. ppk on javascript 笔记(六)--BOM

    浏览器对象模型(Browser Object Model)是语言核心和DOM之间的一个过渡层,这个过渡层特指Javascript的客户端实现,它的主要任务是管理浏览器窗口并使得它们可以彼此通信.win ...

  7. 个人脚手架搭建 -- charmingsong-cli

    个人脚手架搭建 -- charmingsong-cli 目的 为了解决多次构建相同功能的项目,在一定程度上需要定制化以及私有化设置 设计 问题 为什么不用现成的脚手架生成? 如果利用vue或者reac ...

  8. How to fix nuget Unrecognized license type MIT when pack

    When I packaging license within the nupkg, I will using License to replace licentUrl. I using this c ...

  9. Java 学习笔记(16)——Java数据库操作

    数据库操作是程序设计中十分重要的一个部分,Java内置JDBC来操作数据库 JDBC使用 JDBC--Java Database connecting Java数据库连接:本质上JDBC定义了操作数据 ...

  10. 错误 1 未能找到类型或命名空间名称“”, 引入DLL文件出现提示文件不存在问题

    在所有引入都正确的情况下,查看项目目标框架是否正确