grep egrep及相关的正则表达式用法

一、什么是正则表达式

在编写处理字符串的时候,经常需要查询某些符合复杂规则的字符串,正则表达式就是描述这些规则的工具。

正则表达式有基本表达式和扩展正则表达式。扩展正则表达式,是基本正则表达式的补充。有些元字符,稍有不同。

二、正则表达式的组成部分:

由元字符及正常字符所书写,元字符不表达字符本意,而表达控制或通配的功能;

2.1基本正则表达式/扩展正则表达式元字符

字符匹配:【基本/扩展正则表达式元字符相同】


基本/元字符:


扩展/元字符:


说明:


.


.


匹配任意单个字符


[]


[]


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


[^]


[^]


匹配指定范围外的任意单个字符


一些常见的字符集:

数字 [0-9],[[:digit:]],[^0-9],[^[:digit:]]

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

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

所有字母 [a-zA-Z],[[:alpha:]]

标点符号   [[:punct:]]

空白字符   [[:space:]]

字母与数字 [0-9a-zA-Z],[[:alnum:]]

次数匹配:【省去特殊符号的脱字符】


基本/元字符:


扩展/元字符:


说明:


*


*


匹配其前字符,0次或多次


\?


?


匹配其前字符,0次或1次


\+


+


匹配其前字符,1次或多次


\{m\}


{m}


匹配其前字符,精确匹配m次


\{m,n\}


{m,n}


匹配其前字符,至少m次,最多n次


基本/元字符:


扩展/元字符:


说明:


.*


.*


匹配任意字符任意次


\{0,n\}


{0,n}


匹配其前字符,最多n次


\{m,\}


{m,}


匹配其前字符,至少m次

位置锚定:【基本/扩展正则表达式元字符相同】


基本/元字符:


扩展/元字符:


说明:


^


^


锚定行首;用法:^字符串


$


$


锚定行尾;用法:字符串$


\<


\<


锚定词首,也可用\b


\>


\>


锚定词尾,也可用\b


^字符串$


^字符串$


用模式匹配整行


\<字符串\>


\<字符串\>


匹配字符串匹配到的整个单词


注意区别:   ^$               匹配空行

^[[:space:]]*$   有Tab或空格或无字符的行

分组\(\)【基本/扩展正则表达式元字符相同】


基本/元字符:


扩展/元字符:


说明:


\(\)


\(\)


匹配词组,该词组可以被(内置变量,如\1,\2...)记忆


\1


\1


引用,由左至右,第一个左括号与之对应的右括号中的内容


分组\(\)与锚定\<\>一个词组,区别是:分组可以方便以后使用\1的引用

或者:


基本/元字符:


扩展/元字符:


说明:


a|b


a或者b 或者两侧所有内容


注意区别:abc|Cba      表示匹配abc或者Cda

ab(c|C)ba    表示匹配abcba或者abCba

一、如何使用正则表达式

通常,我们是通过文本搜索工具,以行为单位,全局搜索并显示正则表达式匹配的内容。其主要命令有:grep、egrep[grep -E]、fgrep

3.1基本正则表达式的使用

grep:

Global search REgular expression and Print out the line.全局搜索正则表达式和打印


grep用法:grep 选项 匹配模式 文件


选项:--color[=WHEN], --colour[=WHEN]

auto、always、never

-o: 只显示被模式匹配到的内容

-i: ignore case,不区分字符大小写

-v: 显示不能够被模式匹配到的行

-E:使用扩展的正则表达式

-A #: 显示行后#行

-B #:  显示行前#行

-C #:  显示行前行后#行

例一:#grep --color=auto "root" /etc/passwd

例二:#grep -o "root" /etc/passwd

例三:#grep --color=auto -A 1 “root” /etc/passwd

3.2扩展正则表达式使用


egrep用法:egrep 匹配模式 文件


选项:--color[=WHEN], --colour[=WHEN]

auto、always、never

-o: 只显示被模式匹配到的内容

-i: ignore case,不区分字符大小写

-v: 显示不能够被模式匹配到的行

-E:使用扩展的正则表达式

-A #: 显示行后#行

-B #:  显示行前#行

-C #:  显示行前行后#行


egrep等同于grep -E,使用扩展表达式元字符

四、练习使用正则表达式

4.1一般正则表达式练习

声明:为查看更清晰,采用命令别名定义grep显示颜色,截图省略部分行。

alias grep="grep --color=auto"

1、显示/proc/meminfo文件中以大写或小写S开头的行;用两种方式;

# grep "^[sS]" /proc/meminfo

# grep "^s" /proc/meminfo

2、显示/etc/passwd文件中其默认shell为非/sbin/nologin的用户;

思路:找shell为nologin的,采用-v参数取反,再截取用户名

# grep -v "/sbin/nologin$" /etc/passwd | cut -d: -f1

3、显示/etc/passwd文件中其默认shell为/bin/bash的用户;

# grep "/bin/bash$" /etc/passwd | cut -d: -f1

4、找出/etc/passwd文件中的一位数或两位数;

# grep "\<[0-9]\{1,2\}\>" /etc/passwd

5、显示/boot/grub/grub.conf中以至少一个空白字符开头的行;

# grep "^[[:space:]]\+" /boot/grub/grub.conf

6、显示/etc/rc.d/rc.sysinit文件中以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;

# grep "^#[[:space:]]\+[^[:space:]]\+" /etc/rc.d/rc.sysinit

7、打出netstat -tan命令执行结果中以‘LISTEN’,后或跟空白字符结尾的行;

# netstat -tan | grep "LISTEN[[:space:]]\+$"

8、添加用户bash, testbash, basher, nologin (此一个用户的shell为/sbin/nologin),而后找出当前系统上其用户名和默认shell相同的用户的信息;

# grep "^\([[:alnum:]]\+\>\).*\1$" /etc/passwd

还可通过#cat /etc/passwd查看以下用户

4.2扩展正则表达式练习:

1、显示/proc/meminfo文件中以大写或小写S开头的行;用三种方式;

# egrep -i "^s" /proc/meminfo

# grep -E "^[sS]" /proc/meminfo

# grep -E "^(s|S)" /proc/meminfo

2、显示/etc/passwd文件中其默认shell为非/sbin/nologin的用户;

# egrep -v "/sbin/nologin$" /etc/passwd | cut -d: -f1

3、显示/etc/passwd文件中其默认shell为/bin/bash的用户;

# egrep "/bin/bash$" /etc/passwd | cut -d: -f1

4、找出/etc/passwd文件中的一位数或两位数;

# egrep --color=auto "\<[0-9]{1,2}\>" /etc/passwd

5、显示/boot/grub/grub.conf中以至少一个空白字符开头的行;

# egrep "^[[:space:]]+" /boot/grub/grub.conf

6、显示/etc/rc.d/rc.sysinit文件中以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;

# egrep "^#[[:space:]]+[^[:space:]]+" /etc/rc.d/rc.sysinit

7、打出netstat -tan命令执行结果中以‘LISTEN’,后或跟空白字符结尾的行;

# netstat -tan | egrep "LISTEN[[:space:]]*$"

8、添加用户bash, testbash, basher, nologin (此一个用户的shell为/sbin/nologin),而后找出当前系统上其用户名和默认shell相同的用户的信息;

# egrep "^([[:alnum:]]+\>).*\1$" /etc/passwd

9、显示当前系统上root、fedora或user1用户的默认shell;

# grep -E "^(root|fedora|user1)\>" /etc/passwd | cut -d: -f1,7

10、找出/etc/rc.d/init.d/functions文件中某单词后面跟一组小括号的行,形如:hello();

# grep -o -E "\<[[:alnum:]]+\>\(\)" /etc/rc.d/init.d/functions

11、使用echo命令输出一个绝对路径,使用grep取出其基名;

# echo /etc/rc.d/init.d/functions | grep -o -E "[[:alnum:]]+/?$" | cut -d/ -f1

扩展:取出其路径名

[[email protected] ~]# echo "/" |egrep -o --color=auto "^/|/.*[[:alnum:]]" | egrep -o "/|/.*[^[:alnum:]]"

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

# ifconfig | grep -E "\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>"

13、挑战题:写一个模式,能匹配合理的IP地址;

1.0.0.1 -- 239.255.255.255 注意()的位置

"\<[1-9]\>|\<[1-9][0-9]\>|\<1[0-9][0-9]\>|\<2[0-3][0-9]\>"1-239

"\<[0-9]\>|\<[1-9][0-9]\>|\<1[0-9][0-9]\>|\<2[0-4][0-9]\>|\<25[0-5]\>"0-255

#ifconfig |egrep --color=auto ‘(\<[1-9]\>|\<[1-9][0-9]\>|\<1[0-9][0-9]\>)\.(\<[0-9]\>|\<[1-9][0-9]\>|\<1[0-9][0-9]\>|\<2[0-4][0-9]\>|\<25[0-5]\>)\.(\<[0-9]\>|\<[1-9][0-9]\>|\<1[0-9][0-9]\>|\<2[0-4][0-9]\>|\<25[0-5]\>)\.(\<[0-9]\>|\<[1-9][0-9]\>|\<1[0-9][0-9]\>|\<2[0-4][0-9]\>|\<25[0-5]\>)‘

时间: 2024-12-11 17:22:58

grep egrep及相关的正则表达式用法的相关文章

grep, egrep及相应的正则表达式用法详解

grep, egrep及相应的正则表达式用法详解 一.grep/egrep Global search REgular expression and Print out的简写,是一种强大的文本搜索工具,它根据用户指定的文本模式(正则表达元字符以及正常字符组合而成)对目标文件进行逐行搜索,并把匹配的行打印出来.Unix的grep家族包括grep.egrep和fgrep. linux使用GNU版本的grep.它功能更强,可以通过-E.-F命令行选项来使用egrep和fgrep的功能(fgrep不使用

Linux grep,egrep及相应的正则表达式用法详解

linux在进行文本处理过程中的文本搜索工具称为正则表达式.文本搜索工具有grep.egrep.fgrep,egrep为正则表达式的扩展正则表达式,fgrep用于搜索文本字符串,与 grep 和 egrep 命令不同,因为它搜索字符串而不是搜索匹配表达式的模式.grep的含义为: global search Regular expression and Print out the line. 正则表达式(REGular EXPression REGEXP)是由元字符及正常字符所书写的模式,其中的

Linux正则表达式grep,egrep 及相应的正则表达式用法详解

一.正则表达式介绍: 所谓正则,又称正则表达式.正规表示法.常规表示法(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表达式使用单个字符串来描述.匹配一系列符合某个句法规则的字符串.在很多文本编辑器里,正则表达式通常被用来检索.替换那些符合某个模式的文本. 给定一个正则表达式和另一个字符串,我们可以达到如下的目的: 1. 给定的字符串是否符合正则表达式的过滤逻辑(称作"匹配"): 2. 可以通过正则表达式,从字符

grep、egrep及相应的正则表达式用法

Linux系统中grep,egrep命令是一种强大的文本搜索工具,它们能使用正则表达式和扩展正则表达式搜索文本,并把匹配到的行打印出来. 搜寻特定字符串"the"  注: n为显示行号 # grep -n 'the' regular_express.txt 2.使用-v选项反向搜寻特定字符串"the" # grep -vn 'the' regular_express.txt 3.匹配大小写"the"的这个字符串,使用-i选项 # grep -in

grep egrep 用法以及其相应的正则表达式

grep egrep 用法以及其相应的正则表达式 一.grep.egrep命令 本文中主要介绍了linux系统下grep egrep fgrep命令和正则表达式的基本参数和使用格式.方法. 1.grep的定义: grep(global search regular RE ) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它只能使用基本的正则表达式来搜索文本,并把匹配的行打印出来. grep是很常见也很常用的命令,它的主要功能是进行字符串

通配符和正则表达式-grep,egrep,fgrep

通配符和正则表达式-grep,egrep,fgrep 通配符和正则表达式,通配符用于文件名匹配,命令支持ls,cp,rm等;正则为通用匹配,命令支持grep,awk,sed,vi,find等.文本过滤工具grep,egrep,fgrep 通配符 *  匹配零个或多个任意字符 ?  匹配单个任意字符 [] 匹配指定范围内的一个字符,[]括号中的 字符间隔符 可以省略,如,\=:等等.举例[1:2=3,5\7] = [12357],也推荐使用这种省略写法作为标准 ^  取反,表示非.注意:非数字即包

linux常用命令-grep,egrep,regexp

grep: 根据模式搜索文本,并将符合模式的文本行显示出来.Pattern: 文本字符和正则表达式的元字符组合而成匹配条件 grep [options] PATTERN [FILE...] -i(忽略大小写) [[email protected] ~]# grep root /etc/passwdroot:x:0:0:root:/root:/bin/bashoperator:x:11:0:operator:/root:/sbin/nologin[[email protected] ~]# --c

linux下grep、egrep及相应的正则表达式和用法

     linux下grep.egrep及相应的正则表达式和用法                       一.简介      Linux上文本处理三剑客(引用自马哥教育 ):  grep, egrep, fgrep:文本搜索工具:基于"pattern"对给定文本进行搜索操作:     sed:Stream EDitor,流编辑器,行编辑工具:文本编辑工具:     awk:GNU awk,文本格式化工具:文本报告生成器:         grep (缩写来自Globally se

linux基本命令grep egrep fgrep用法以及正则表达式

1.1.基本定义:  www.2cto.com grep(global search regular RE ) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它只能使用基本的正则表达式来搜索文本,并把匹配的行打印出来. grep是很常见也很常用的命令,它的主要功能是进行字符串数据的比较,然后符合用户需求的字符串打印出来,但是主意,grep在数据中查找一个字符串时,是以"整行"为单位进行数据筛选的. egrep命令等同于grep