欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 锐评 > 十五、全局搜索正则表达式

十五、全局搜索正则表达式

2025/10/28 7:07:59 来源:https://blog.csdn.net/weixin_53445843/article/details/144214744  浏览:    关键词:十五、全局搜索正则表达式

一.grep简介

grep 全程Globally search a Regular Expression and Print,是一种强大的文本搜索工具,它能使用特 定模式匹配(包括正则表达式)搜索文本,并默认输出匹配行。Unix的grep家族包括grep和egrep

二.grep的工作模式

1.grep执行语法

grep [option] file...

2.工作方式

  • grep在一个或者多个文件中搜索字符串模板
  • 如果模板中包括空格,需要使用引号引起来
  • 模板后的所有字符串会被看作是文件名

3.工作结果

  • 如果模板搜索成功,则返回0状态码
  • 如果搜索不成功,则返回1状态码
  • 如果搜索的文件不存在,则返回2的状态码

三.grep的常用参数详解

1.常用参数详解

选项说明
-i忽略大小写
-e实现多个选项间的逻辑或关系
-E如果pattern是扩展正则表达式,需要使用-E选项,grep -E=egrep
-n显示行号
-w按照单词匹配
-o只显示匹配到的内容
-v不显示匹配到的行
-c统计匹配的行数
[root@node mnt]# vim sen
[root@node mnt]# grep root sen
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
test:root:test
test:chroot:test
test:test:root
[root@node mnt]# grep -i root sen
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
test:root:test
test:ROOT:test
test:chroot:test
test:test:root
[root@node mnt]# grep root sen
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
test:root:test
test:chroot:test
test:test:root
[root@node mnt]# grep root bash sen
grep: bash: No such file or directory
sen:root:x:0:0:root:/root:/bin/bash
sen:operator:x:11:0:operator:/root:/sbin/nologin
sen:test:root:test
sen:test:chroot:test
sen:test:test:root
[root@node mnt]# grep -e root sen
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
test:root:test
test:chroot:test
test:test:root
[root@node mnt]# grep lp sen
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@node mnt]# grep -n lp sen
5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@node mnt]# grep -A2 lp sen
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
[root@node mnt]# grep -B2 lp sen
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@node mnt]# grep -w root sen
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
test:root:test
test:test:root
[root@node mnt]# grep -o root sen
root
root
root
root
root
root
root
[root@node mnt]# grep root sen -v
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
test:ROOT:test[root@node mnt]# grep root sen -c
5

四.正则表达式的使用

1.什么是正则表达式

正则表达式就是用在字符串的处理上面的一项表示式

在我们做程序设计时很多需要对一类字符进行处理,正则表达式就完美的解决了这个问题

2.正则表达式

基本正则表达式(Basic Regular Expression,BRE),又称为标准正则表达式,是最早制订的正则表达 式规范,仅支持最基本的元字符集。基本正则表达式是POSIX规范制订的两种正则表达式语法标准之一, 另外一种语法标准称为扩展正则表达式

扩展正则表达式(Extended Regular Expression,ERE)支持比基本正则表达式更多的元字符

元字符表达式类型说明
^基本正则以某个字符开头
$基本正则以某个字符结尾
.基本正则匹配任意单字符
*基本正则字符出现0到任意次
基本正则字符出现0到1此
+基本正则字符出现1到任意次
{m,n}基本正则将前一项字符重复m-n次,{m,},{,n},{m}
[]基本正则对方括号内的单字符进行匹配
[^]基本正则不匹配方括号内的单字符
^[]基本正则匹配以某个字符开头的行
\基本正则转义字符,让一些特殊符号失效
()基本正则定义一个子表达式
(str1 | str2)基本正则匹配str1 或str2
词首【或\b】和词尾锚定 【>或者\b】基本正则其后面的任意字符必须作为单词首部出现;其前面的 任意字符必须作为单词尾部出现

Note

在grep命令使用基本正则表达式时不需要加任何参数

在grep命令使用扩展正则表达式时必须加-E参数

示例:

a.过滤以root开头的行,过滤以root开头bash结尾的行

[root@node shell]# grep ^root testfile
root:x:0:0:root:/root:/bin/bash
[root@node shell]# grep -E "(^root|bash$)" testfile
root:x:0:0:root:/root:/bin/bash

b.过滤以root结尾的行

[root@node shell]# grep root$ testfile
test:test:root

c.搜索e开头y结尾的三字符单词,搜索e开头y结尾的四字符单词

[root@node shell]# vim testfile1
eay
eby
eaay
ebby
eaaay
ebbby
eaaaaay
ebbbbby
eababy
eaby
eabababy
[root@node shell]# grep e.y testfile1
eay
eby
[root@node shell]# grep e..y testfile1
eaay
ebby
eaby

d.搜索e开头Y结尾的所有行

[root@node shell]# grep e.*y testfile1
eay
eby
eaay
ebby
eaaay
ebbby
eaaaaay
ebbbbby
eababy
eaby
eabababy

e.搜索自定次数出现的字符

[root@node shell]# grep -E "e.{2}y" testfile1
eaay
ebby
eaby
[root@node shell]# grep -E "e.{,2}y" testfile1
eay
eby
eaay
ebby
eaby
[root@node shell]# grep -E "e.{2,}y" testfile1
eaay
ebby
eaaay
ebbby
eaaaaay
ebbbbby
eababy
eaby
eabababy
[root@node shell]# grep -E "e.{2,3}y" testfile1
eaay
ebby
eaaay
ebbby
eaby
[root@node shell]# grep -E "e.?y" testfile1
eay
eby
[root@node shell]# grep -E "e.+y" testfile1
eay
eby
eaay
ebby
eaaay
ebbby
eaaaaay
ebbbbby
eababy
eaby
eabababy
[root@node shell]# grep -E "e[^ac]?y" testfile1
eby
[root@node shell]# grep -E "e[ac]?y" testfile1
eay
[root@node shell]# grep -E "e(ab)?y" testfile1
eaby

3.正则表达式字符集

字符说明
[[:alpha:]]匹配任意一个字母,等价于 [A-Za-z]
[[:alnum:]]匹配任意一个字母或者数字,等价于 [A-Za-z0-9]
[[:digit:]]匹配任意一个数字,等价于 0-9
[[:lower:]]匹配任意一个小写字母,等价于 a-z
[[:upper:]]匹配任意一个大写字母,等价于 A-Z
[[:space:]]匹配任意一个空白符,包括空格、制表符、换行符以及分页符
[[:blank:]]匹配空格和制表符
[[:graph:]]匹配任意一个看得见的可打印字符,不包括空白字符
[[:print:]]匹配任何一个可以打印的字符,包括空白字符,但是不包括控制字符、字符串结束 符‘\0’ 、 EOF 文件结束符( -1 )
[[:cntrl:]]匹配任何一个控制字符,即 ASCII 字符集中的前 32 个字符。例如换行符、制表符等
[[:punct:]]匹配任何一个标点符号,例如 “[]” 、 “ {}”或者 “,” 等
[[:xdigit:]]匹配十六进制数字,即 0-9 、 a-f 以及 A-F

Note

通配符和正则表达式比较

1.通配符和正则表达式看起来有点像,不能混淆,可以简单的理解为通配符只有\*,?,[],{}这4种,而正 则表达式复杂多了

2.在通配符和正则表达式中有其不一样的地方,在通配符中*可以匹配任意的0个或多个字符,而在正则表 达式中他是重复之前的一个或者多个字符,不能独立使用的。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词