grep正则表达式详解及练习

grep正则表达式详解及练习

一、在学习grep正则表达式前,先了解下linux著名的文本处理三剑客:

(1)grep、egrep、fgrep 文本搜索工具。

(2)sed     文本编辑工具,一种流编辑器,行编辑工具。

(3)awk 强大的文本分析工具,文本格式化工具,文本报告生成器。

以上三大命令均支持正则表达式,本文以grep正则表达式为例展开学习。

1、什么是正则表达式?

正则表达式(Regular Expression):由一类特殊字符及文本字符所编写的模式,其有些字符不表示其字面意义,而是用于表示控制或通配的功能。正则表达式只是字符串的一种描述(一种表示法),只有和支持正则表达式的工具相结合才能进行字符串处理。

2、正则表达式的构成:

正则表达式由两种字符构成。一种是在正则表达式中具体特殊意义的“元字符”,另一种是普通的“文本字符”。元字符可以是一个字符,如“^”,也可以是一个字符序列,如“\b”。

3、主要分为两类:(1)基本正则表达式(BRE)

(2)扩展正则表达式(ERE)

二、本文以grep为例来讲解正则表达式

1、grep家族有三大成员分别为:

grep:支持使用基本正则表达式。

egrep:支持使用扩展正则表达式。

fgrep:不支持使用正则表达式。

2、grep命令:

功能:根据用户指定的”pattern(过滤条件)“对目标文本逐行进行匹配检查;打印出符合条件的行,即文本搜索工具。注:PATTERN即过滤条件指由文本字符及正则表达式元字符所编写的字符串。

常用选项一:

--color=auto,每次grep搜索之后,自动高亮显示所匹配字符。

CentOS7定义了grep别名alias grep=’grep--color=auto’

-i:忽略字符大小写

-o:仅输出文件中匹配到的部分

-v:反向查找,输出文件中不匹配的行。

-q:进入静默模式,该模式下,grep命令运行目的仅仅是执行一个条件测试,通常在脚本中使用,通过检查其返回值进行下一步操作。

常用选项二:

-E:支持使用扩展正则表达式,相当于egrep;

-F:支持使用固定字符串,不支持正则表达式,相当于fgrep;

-G:支持使用基本正则表达式;

-P:支持使用pcre正则表达式;

-A:显示匹配字符串及后n行的数据

-B:显示匹配字符串及前n行的数据

-C: 显示匹配字符串及前后各n行的数据

-e:多模式机制;

-f:FILE为每行包含了一个pattern的文本文件,即grep script;

-n:在行首显示行号

3、基本正则表达式元字符:

(1)字符匹配:

.:匹配任意单个字符

[ ]:匹配范围内的任意单个字符    [abc]表示“a”或“b”或“c”

[^ ]:匹配范围外的任意单个字符   [^abc]表示除了“a”、“b”、“c”外的其他任意字符。

(2)匹配次数: 用在要指定其出现的次数的字符后面,限制其前面字符出现的次数,默认工作在贪婪模式。

*: 匹配前面的字符任意次(0、1、或多次),相当于\{0,\}

.*:任意长度的任意字符;

\+:匹配前面的字符至少1次,相当于\{1,\}

\?:匹配前面的字符0次或者1次,即前面的字符可有可无,相当于\{0,1\}

\{m\}:其前面的字符出现m次,m为非负整数;

\{m,n\}:其前面字符出现最少m次最多n次,\{m,\}最少m次,\{o,n\}最多n次;

(3)位置锚定:限制使用搜索模式搜索文本,限制模式所匹配到的文本只能出现于目标文本的那个位置

^: 行首锚定;用于模式的最左侧,^PATTERN ,  ^hello搜寻以hello开头的行。

$: 行尾锚定;用于模式的最右侧,$PATTERN ,  $hello搜寻以hello结束的行。

^PATTERN$: 让PATTERN完全匹配一整行, ^how are you$搜索内容为”how are you”的行。

^$ :搜寻内没有任何字符的行(包括空白字符),空行

^[[:space:]]*$ :空行或仅有空白字符的行;

(4)单词锚定:  Linux中的单词指:由非特殊字符组成的连续字符(字符串)。

\<\b: 词首锚定,用于单词模式的左侧,\<PATTREN或\bPATTERN

\>\b: 词尾锚定,用于单词模式的右侧,PATTERN\>或PATTREN\b

\<PATTERN\>:单词锚定

(5)分组与引用:

\(PATTERN\):将此PATTERN匹配到的字符作为一个不可分割的整体进行处理;分组匹配到的内容会被正则表达式引擎自动记录到内部变量中,这些变量是\1,\2,\3,…

pat1\(pat\2)pat3\(pat4\(pat5\)pat\)

\1:第一组括号中的pattern匹配到的字符串,从左侧起,第一个左括号及与之匹配的右括号内模式匹配到的内容。

\2:第二组括号中的pattern匹配到的字符串,从左侧起,第二个左括号及与之匹配的右括号内模式匹配到的内容。

后向引用:引用前面括号中的模式所匹配到的字符

输出结果中行首字符跟行尾字符相同(行尾引用了行首匹配到内容)。

4、egrep命令:

支持使用扩展正则表达式的grep命令,相当于grep -E,其常用选项基本同grep命令,可参考上文。

5、扩展正则表达式元字符:

扩展正则表达式就是在基本正则表达式的基础上,增加了一些元字符,而且有部分参数是不需要添加\转义符使用的。

(1)字符匹配:

.:匹配任意单个字符

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

[^ ]:匹配范围外的任意单个字符

(2)匹配次数:

*:  匹配前面的字符任意次(0、1、或多次);

.*: 任意长度的任意字符;

+: 匹配前面的字符至少1次

?: 匹配前面的字符0次或者1次,即前面的字符可有可无;

{m}:其前面的字符出现m次,m为非负整数;

{m,n}: 其前面字符出现最少m次最多n次,{m,}最少m次,{o,n}最多n次

(3)位置锚定:

^:行首

$:行尾

\<\b:词首

\>,\b:词尾

(4)分组及引用:

( ):分组

\1,\2,:后向引用

注意:特殊用法

C|cat:表示C或cat ,表示整个左侧或整个右侧。

(C|c)at:表示Cat或cat

三、作业练习:

1、显示/etc/passwd文件中以bash结尾的行;

2、找出/etc/passwd文件中的三位或四位数;

3、找出/etc/grub2.cfg文件中,以至少一个空白字符开头,后面又跟了非空白字符的行

4、找出"netstat  -tan”命令的结果中,以‘LISTEN’后跟0或多个空白字符结尾的行;

5、找出"fdisk  -l“命令的结果中,包含以/dev/后跟sd或hd及一个字母的行;

6、找出”ldd  /usr/bin/cat“命令的结果中文件路径;

7、找出/proc/meminfo文件中,所有以大写或小写s开头的行;至少用三种方式实现;

8、显示当前系统上root、centos或spark用户的相关信息;

9、echo输出一个绝对路径,使用egrep取出其基名;

10、找出ifconfig命令结果中的1-255之间的整数;

11、找出系统中其用户名与shell名相同的用户。

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

grep正则表达式详解及练习的相关文章

grep正则表达式详解

08月27日的作业 正则表达式: (RegularExpression,在代码中常简写为rex.regexp或RE) 正则表达式使用单个字符串来描述.匹配一系列符合某个句法规则的字符串.通常被用来检索.替换符合某个模式的文本. 正则表达式是指一类字符书写的模式(pattern)这些字符成为元字符,元字符不表示其字面意义,而用于表示通配或控制功能. 正则表达式包括两类:基本正则表达式,扩展正则表达式 grep命令只支持基本正则表达式: egrep支持扩展正则表达式("e" 表示扩展),

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

Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户. 主要参数    [options]主要参数:    -c:只输出匹配行的计数.    -I:不区分大 小写(只适用于单字符).    -h:查询多文件时不显示文件名.    -l:查询多文件时只输出包含匹配字符的文件名.    -n:显示匹配行及 行号.    -s

grep 命令详解及相关事例

一.匹配字符 .    匹配任意单个字符 [ ]  匹配指定范围内的任意字符 [^]  匹配飞指定范围内的任意字符 [:alpha:] 字母字符 [:lower:] 小写字母字符 [:upper:] 大写字母字符 [:digit:] 数字 [:alnum:] 字母数字字符 [:space:] 空白字符(禁止打印),如回车符.换行符.竖直制表符和换页符 [:punct:] 标点字符 [:cntrl:] 控制字符(禁止打印) [:print:] 可打印字符 使用时一般使用两个中括号,具体会在下面的例

linux grep命令详解

linux grep命令详解 http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856896.html grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来. Unix的grep家族包括grep.egrep和fgrep.egrep和fgrep的命令只跟gr

文本处理工具之一grep命令详解

grep(Globel Search Regular Expression and Printing out the line)全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,是一个对行进行操作的搜索工作,它能使用正则表达式搜索文本,并把匹配的行打印出来.Unix的grep家族包括grep.egrep和fgrep. egrep表示扩展的grep,相比grep支持更多的元字符,"grep -E"相当于egrep.fgrep是fast grep,不支持元字符,但是搜索速度更快.

Shell编程之---正则表达式详解

正则表达式详解 普通字符:只是字面的意思 元字符:超过字面意思的意义 基本正则表达式元字符及其意义 * #0个或多个在*字符之前的那个普通字符 .               #匹配任意字符 ^         #匹配行首 $         #匹配行尾 $$ #执行上一条命令 !$ #上一条命令的最后一个参数,例如是/etc/passwd,继续对该参数操作,可以为 cat !$ []        #匹配字符集合 \          #转义符 \{n\}      #匹配前面字符出现n次 \

awk.sed.grep三剑客详解

事前准备1.主机node1:172.16.133.112.作为实验的文件/etc/passwd /etc/fstab qinqin cp /etc/passwd . cp /etc/fstab . 一.grep用法详解1.grep是干什么的grep的全名是Galobal research Regular Expression and Pringtiong,即搜索正则表达式,也就是说grep简单来讲就是用来搜索匹配字符的2.grep分类grep有基本正则表达式和扩展正则表达式之分,不过她们的作用域

python正则表达式详解

python正则表达式详解 正则表达式是一个很强大的字符串处理工具,几乎任何关于字符串的操作都可以使用正则表达式来完成,作为一个爬虫工作者,每天和字符串打交道,正则表达式更是不可或缺的技能,正则表达式的在不同的语言中使用方式可能不一样,不过只要学会了任意一门语言的正则表达式用法,其他语言中大部分也只是换了个函数的名称而已,本质都是一样的.下面,我来介绍一下python中的正则表达式是怎么使用的. 首先,python中的正则表达式大致分为以下几部分: 元字符 模式 函数 re 内置对象用法 分组用

grep命令详解

grep命令是linux下的行过滤工具,其参数繁多,下面就一一介绍个个参数的作用,希望对大家有所帮助.grep -- print lines matching a pattern (将符合样式的该行列出)◎语法: grep [options] PATTERN [FILE...] grep用以在file内文中比对相对应的部分,或是当没有指定档案时, 由标准输入中去比对. 在预设的情况下,grep会将符合样式的那一行列出.此外,还有两个程序是grep的变化型,egrep及fgrep. 其中egrep