grep正则表达式原理介绍及应用实例

应用背景:我们刚刚添加了一个用户Luffy,但是不知道他的默认shell是什么。

问题:如何取出一个用户的默认shell?

解决方法:

#grep ‘^Luffy\>‘ /etc/passwd | cut -d: -f7

/bin/bashf

通过上面的方法,我们就得到了Luffy这个用户的默认shell

文本搜索工具:就是要根据用户指定的文本模式,逐行的进行匹配,最终得到符合文本模式的行

grep是一个强大的文本搜索工具,下面我们就介绍一下grep的语法:

grep [OPTIONS] PATTERN [FILE...]

grep后面上选项,然后是模式,最后是文件名

1、它的常用选项有

-E, --extended-regexp            //即,扩展的grep,我们后面会提及到egrep

-i, --ignore-case      //即,忽略大小写

-v, --invert-match     //即,取相反的操作

-o, --only-matching    //即,仅显示匹配到的字串,并非所在行

-B, --before-context=NUM            //即,取出匹配的行的前面三行的数据

-A, --after-context=NUM             //即,取出匹配的行的后面三行的数据

-C, --context=NUM                   //即,取出匹配的行的上下三行的数据

-n, --line-number//即,匹配结果显示时,加上行号

2、说到匹配模式,我们就引入第二个概念,正则表达式

正则表达式:是一类字符所组成的模式,且其中的字符,不表示其字面的意义,是一种控制或是通配功能的元字符。

简单来说,正则就是为了我们精确描述需要的内容所设置的,可以用于多个命令。

基本正则表达式的元字符:

a、字符匹配:

.:匹配任意的单个字符

举例:L..e   匹配有个L,后面跟两个字符,最后有个e的行

[]:匹配指定范围内的任意的单个字符

[0-9],[[:digit:]]----匹配数字

[a-z],[[:lower:]]----匹配小写字母

[A-Z],[[:upper:]]----匹配大写字母

[[:punct:]]----匹配标点符号

[[:alnum:]]----匹配字母或是数字

[[:alpha:]]----匹配字母(可以使大写、小写)

[[:space:]]----匹配空格

[^]-----取反

举例:[^A-Z]   匹配不在范围A到Z之间的任意个字符

b、次数匹配元字符:实现其前面的字符出现的次数:

*:表示其前面的字符可以出现任意次

\?:表示其前面的字符可以出现0次或是1次,即该字符是可有可无的

举例:lover\?  即r是可有可无的,可以使lover也可以是love

\{m\}:精确匹配,表示其前面的字符要出现m次

\{m,n\}:范围匹配,表示其前面的字符出现的次数在m,n之间,最小m次,最大n次

\{m,\}::范围匹配,表示其前面的字符出现最少m次

\{0,n\}:范围匹配,表示其前面的字符出现最多n次,可以在0到n次匹配

c、位置锚定:

^:行首锚定,即一行的开始位置

举例:^love  匹配所有以love开头的行

$:行尾锚定,即一行的末尾位置

举例:love$  匹配所有以love结尾的行

^$:行首和行尾,表示空白行

\<:词首锚定,匹配单词的左侧,也可以用\b

举例:\<love  匹配包含以love开头的词的行

\>:词尾锚定,匹配单词的右侧,也可以用\b

举例:love\>  匹配包含以love结尾的词的行

d、分组:

\(\):分组中的模式匹配到的内容,可由正则记忆在内存中,之后可被使用

e、引用:

\n:引用第几个括号所匹配到的内容,而非模式本身

举例:\(love\).*\1r  匹配love,然后引用,后面加r,变成lover

扩展正则表示式(egrep):grep -e = egrep

字符匹配:

.:匹配任意的单个字符

[]:匹配指定范围内的任意的单个字符(应用如上面的基本正则)

[^]:表示取反

次数匹配:(与上方的基本正则不同的是,没有转义符\)

*:任意次

?:0次或是1次

+:至少一次

{m}:精确匹配m次

{m,n}:至少m次,最多n次

{m,}:最少m次

{0,n}:最多n次

锚定:(参考上面基本正则的用法)

分组:

( ):分组中的模式匹配到的内容,可由正则记忆在内存中,之后可被使用

注意:与上面的基本正则不同,没有转义符

引用:同上基本正则

或者:|

redhat|centos : redhat或者centos

实例应用(基础):

准备:将对如下的名为chsang.txt的文件进行操作

grep篇:

1、显示b和y之间有一个字符的行

2、找出以小写s开头的行:

3、找出以空白开头的行

4、找出含有数字开头的行

5、找出有most和must单词的行

6、找出small和smll开头的行

7、找出一个单词开头最面加r的行

egrep篇:

1、找出大小写s开头的行

2、只显示后面以点结尾的单词

3、找出两位数或是两位数以上的行

提高题:

1、取出当前主机的ip地址

2、取出/etc/inittab文件中,以#开头,且后面跟一个空格的行

3、找出ifconfig命令结果中的1-255之间的数字

总结:grep在对于数据的处理,通过正则,我们可以从文件中取到我们需要的数据,并将其显示出来

对于不懂的地方,希望读者朋友多用man去查阅或是google一下。

以上都是个人通过学习后的理解,在这里我要感谢马哥教育给我带来的成长,同时,对于文章中的不对之处,请各位读者联系我,[email protected],这是我的第一个博客,不喜勿喷,谢谢

grep正则表达式原理介绍及应用实例

时间: 2024-10-21 06:05:55

grep正则表达式原理介绍及应用实例的相关文章

grep过滤用法介绍(一)

grep过滤用法介绍(一) grep主要作用是过滤出指定的行,指定的行满足什么条件,满足的条件我们就可以用一个正则表达式来表示.为了方便下面的实验进行,我们先进行cp /etc/passwd  1.txt 例如:#grep 'root'1.txt,截图如下: 匹配过滤出,有root的行! grep有一个选项很好用: 1.grep --color 'root' 1.txt 标注红色.为了方便使用,我们做一个别名操作,alias cgrep='grep --color'[删除用unalias+别名]

grep正则表达式与grep用法详解

功能:输入文件的每一行中查找字符串. 基本用法: grep [-acinv] [--color=auto] [-A n] [-B n] '搜寻字符串' 文件名 参数说明: -a:将二进制文档以文本方式处理-c:显示匹配次数-i:忽略大小写差异-n:在行首显示行号-A:After的意思,显示匹配字符串后n行的数据-B:before的意思,显示匹配字符串前n行的数据-v:显示没有匹配行-A:After的意思,显示匹配部分之后n行-B:before的意思,显示匹配部分之前n行 --color:以特定颜

Traceroute原理介绍

一.路由追踪 路由跟踪,就是获取从主机A到达目标主机B这个过程中所有需要经过的路由设备的转发接口IP. 二.ICMP协议 Internet控制报文协议(internet control message protocol),它是TCP/IP协议族的一个子协议,用于在IP主机.路由器之间传递控制消息.控制消息是指网络通不通.主机是否可达.路由是否可用等网络本身的消息.这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用. 日常生活中,邮寄包裹会经过多个传递环节,任意一环如果无法传下

ajax原理总结附简单实例及其优点

在工作中用了Ajax N多次了,也看过一些相关方面的书籍,也算是认识了它,但是一直没有认真总结和整理过相关的东东,失败! 近有闲情,将之总结如下: [名称] Ajax是Asynchronous JavaScript and XML(以及 DHTML 等)的缩写. 详情请移步Ajax: A New Approach to Web Applications [原理] 简单一些,就是通过使用XmlHttpRequest对象向服务器发送异步请求,获取返回的数据,并使用Javascript和DOM操作页面

03 Yarn 原理介绍

Yarn 原理介绍 大纲: Hadoop 架构介绍 YARN 产生的背景 YARN 基础架构及原理 Hadoop的1.X架构的介绍 在1.x中的NameNodes只可能有一个,虽然可以通过SecondaryNameNode与NameNode进行数据同步备份,但是总会存在一定的时延,如果NameNode挂掉,但是如果有部份数据还没有同步到SecondaryNameNode上,还是可能会存在着数据丢失的问题. 包含两层: Namespace l 包含目录.文件以及块的信息 l 支持对Namespac

linux grep 正则表达式

grep正则表达式元字符集: ^ 锚定行的开始 如:'^grep'匹配所有以grep开头的行. $ 锚定行的结束 如:'grep$'匹配所有以grep结尾的行. . 匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p. * 匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行. .*一起用代表任意字符. [] 匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep. [^] 匹配一个不在指定范围内的字符,如:'[^A-FH-Z]

正则表达式 简单介绍

一.正则表达式基本介绍: 实际应用中,经常需要按照某些规则去操作字符串,正则表达式恰好是制定这些规则的利器. 正则表达的英文全程是regular expression,正如它的名字,可以将它分为两个部分来理解: (1).第一部分是规则(regular),用来约束各个字符的语义.例如点(.)可以表示任意一个字符,星号(*)可以表示零个或者多个字符,或者\d表示一个数字等. (2).第二部分是表达式(expression),是由字符组成的字符串(实质就是由一个个单独的规则,组成一个总体匹配规则),用

python爬虫—爬取英文名以及正则表达式的介绍

python爬虫—爬取英文名以及正则表达式的介绍 爬取英文名: 一.  爬虫模块详细设计 (1)整体思路 对于本次爬取英文名数据的爬虫实现,我的思路是先将A-Z所有英文名的连接爬取出来,保存在一个csv文件中:再读取csv文件当中的每个英文名链接,采用循环的方法读取每一个英文名链接,根据每个英文名链接爬取每个链接中的数据,保存在新的csv文件当中. 需要写一个爬取英文名链接的函数.将爬取的内容保存在csv文件的函数以及读取csv文件内容的函数.爬取英文名详情页内容的函数. 表5.3.1 函数名

linux入门之grep 正则表达式案例

grep 正则表达式案例 案例一: 1.显示/proc/meminfo文件中以大小s开头的行:(要求:使用两种方式) #grep -i '^s' /proc/meminfo #grep  '^[Ss]' /proc/meminfo #grep -E '^(s|S)' /proc/meinfo 2.显示/etc/passwd文件中不以/bin/bash结尾的行 #grep -v '/bin/bash$' /etc/passwd 3.显示用户rpc默认的shell程序 #grep '^\<rpc\>