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

embedded/2025/2/7 7:09:18/

一.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个或多个字符,而在正则表 达式中他是重复之前的一个或者多个字符,不能独立使用的。


http://www.ppmy.cn/embedded/144179.html

相关文章

第七章续版,mapper.xml,这是重点,一对多,一对一,动态SQL,foreach...

mapper,mapper.xml 1.单表查询 <select id"接口名" parameterType"参数类型&#xff0c;单个参数时写对应类型&#xff0c;两个及以上用Map" resultType"返回值类型&#xff0c;查询必须写">这里写SQL语句 </select> Map时测试类写…

【QT】:QT(介绍、下载安装、认识 QT Creator)

背景 &#x1f680; 在我们的互联网中的核心岗位主要有以下几种 开发&#xff08;程序员&#xff09;测试运维&#xff08;管理机器&#xff09;产品经理&#xff08;非技术岗位&#xff0c;提出需求&#xff09; 而我们这里主要关注的是开发方向&#xff0c;开发岗位又分很…

捷米特 EtherNet/IP 总线协议网关的具体内容介绍

关于EtherNET/IP的基本介绍 EtherNet/IP 中的 “Ethernet” 指以太网&#xff0c;是一种常见的局域网技术&#xff0c;用于在有限区域内实现多台设备之间的数据传输&#xff1b;“IP” 在此处指工业协议&#xff08;Industrial Protocol&#xff09;&#xff0c;而不是通常所说…

Ubuntu 20.04安装rsync 3.2.7

前言 Ubuntu 20.04的apt中不支持rsync 3.2.0的安装&#xff0c;因此需要手动编译安装&#xff0c;记录下过程 ~$ apt policy rsync rsync:已安装&#xff1a;(无)候选&#xff1a; 3.1.2-2.1ubuntu1.6版本列表&#xff1a;3.1.3-8ubuntu0.7 -1100 /var/lib/dpkg/status下载所…

Ubuntu22.04搭建LAMP环境(linux服务器学习笔记)

目录 引言&#xff1a; 一、系统更新 二、安装搭建Apache2 1.你可以通过以下命令安装它&#xff1a; 2.查看Apache2版本 3.查看Apache2运行状态 4.浏览器访问 三、安装搭建MySQL 1.安装MySQL 2.查看MySQL 版本 3.安全配置MySQL 3.1是否设置密码&#xff1f;(按y|Y表…

【PyQt5教程 二】Qt Designer 信号与槽的使用方法及PyQt5基本小部件说明

目录 一、信号与槽机制&#xff1a; 二、信号与槽使用方法&#xff1a; &#xff08;1&#xff09;使用Qt Designer 的信号与槽编辑器&#xff1a; &#xff08;2&#xff09;使用固定语法直接建立信号槽连接&#xff1a; 三、PyQt小部件及其触发信号&#xff1a; &#x…

23种设计模式之解释器模式

目录 1. 简介2. 代码2.1 Expression &#xff08;抽象表达式类&#xff09;2.2 TerminalExpression &#xff08;终结符表达式类&#xff09;2.3 OrExpression &#xff08;非终结符表达式类&#xff09;2.4 AndExpression &#xff08;非终结符表达式类&#xff09;2.5 Test &…

Vue3+Vite+ElementPlus 构建 笔记

1、Node.js 查看 node -v 2、如果你的网络环境不佳&#xff0c;推荐使用 换源 npm config set registry https://registry.npmmirror.com 3、Vue 3 编码规范 使用 1.编码语言&#xff1a;TypeScript 2.代码风格&#xff1a;组合式API 3.简写形式&#xff1a;setup语法糖 4…