【BASH】回顾与知识点梳理(九)
【BASH】回顾与知识点梳理 九
- 九. 扩展正则表达式(延伸正规表示法)
- 9.1 egrep命令语法
- 匹配指定模式的行(用法和grep相同)
- 忽略大小写匹配(用法和grep相同)
- 反向匹配(用法和grep相同)
- 显示行号(用法和grep相同)
- 递归搜索目录(用法和grep相同)
- 匹配整词(用法和grep相同)
- 统计匹配行数(用法和grep相同)
- 显示匹配行及其上下文内容(用法和grep相同)
- 9.2 egrep和grep的区别
- 9.3 延伸型的正规表示法的特殊字符
- 匹配重复字符(用法和grep不同)
- 匹配分组模式(用法和grep不同)
- 匹配'或'模式(用法和grep不同)
- 匹配重复群组(用法和grep不同)
该系列目录 --> 【BASH】回顾与知识点梳理(目录)
九. 扩展正则表达式(延伸正规表示法)
事实上,一般读者只要了解基础型的正规表示法大概就已经相当足够了,不过,某些时刻为了要简化整个指令操作, 了解一下使用范围更广的延伸型正规表示法的表示式会更方便呢!举个简单的例子好了,在上节的例题三的最后一个例子中,我们要去除空白行与行首为 # 的行列,使用的是
grep -v '^$' regular_express.txt | grep -v '^#'
需要使用到管线命令来搜寻两次!那么如果使用延伸型的正规表示法,我们可以简化为:
egrep -v '^$|^#' regular_express.txt
9.1 egrep命令语法
下面是 egrep 命令的基本语法:
egrep [选项] '模式' 文件
选项:
| 选项 | 描述 |
|---|---|
| -i | 忽略大小写进行匹配 |
| -v | 反向匹配,输出不匹配模式的行 |
| -n | 显示匹配行的行号 |
| -r | 递归搜索,对目录下的所有文件进行匹配 |
| -w | 匹配整词,仅匹配单词的完整匹配 |
| -c | 统计匹配到的行数 |
| -A | 显示匹配行及其后面指定行数的内容 |
| -B | 显示匹配行及其前面指定行数的内容 |
| -C | 显示匹配行及其前后指定行数的内容 |
匹配指定模式的行(用法和grep相同)
#要查找文件中匹配指定模式的行,可以使用以下命令:
egrep '模式' 文件
#例如,要在文件 regular_express.txt 中查找包含字符串 "good" 的行,可以运行以下命令:
[root@node-135 yurq]# egrep 'good' regular_express.txt
"Open Source" is a good mechanism to develop programs.
Oh! The soup taste good.^M
忽略大小写匹配(用法和grep相同)
如果要忽略模式的大小写,可以使用 -i 选项。例如:
[root@node-135 yurq]# egrep -i 'GOOD' regular_express.txt
"Open Source" is a good mechanism to develop programs.
Oh! The soup taste good.^M
反向匹配(用法和grep相同)
要输出不匹配指定模式的行,可以使用 -v 选项。例如:
[root@node-135 yurq]# egrep -iv 'GOOD' regular_express.txt
apple is my favorite food.
Football game is not use feet only.
this dress doesn't fit me.
显示行号(用法和grep相同)
要显示匹配行的行号,可以使用 -n 选项。例如:
[root@node-135 yurq]# egrep -n 'good' regular_express.txt
1:"Open Source" is a good mechanism to develop programs.
9:Oh! The soup taste good.^M
递归搜索目录(用法和grep相同)
要在目录及其子目录下的所有文件中递归搜索匹配的行,可以使用 -r 选项。例如:
[root@node-135 yurq]# egrep -r 'good' .
./regular_express.txt:"Open Source" is a good mechanism to develop programs.
./regular_express.txt:Oh! The soup taste good.^M
./regular_express.txt.bak:"Open Source" is a good mechanism to develop programs.
./regular_express.txt.bak:Oh! The soup taste good.^M
匹配整词(用法和grep相同)
要仅匹配单词的完整匹配,可以使用 -w 选项。例如:
[root@node-135 yurq]# egrep -w 'good' regular_express.txt
"Open Source" is a good mechanism to develop programs.
Oh! The soup taste good.^M
统计匹配行数(用法和grep相同)
要统计匹配到的行数,可以使用 -c 选项。例如:
[root@node-135 yurq]# egrep -c 'good' regular_express.txt
2
显示匹配行及其上下文内容(用法和grep相同)
要显示匹配行及其前后指定行数的内容,可以使用 -A、-B 和 -C 选项。例如:
[root@node-135 yurq]# egrep -i -A2 -B2 'good' regular_express.txt
"Open Source" is a good mechanism to develop programs.
apple is my favorite food.
Football game is not use feet only.
--
Her hair is very beauty.^M
I can't finish the test.^M
Oh! The soup taste good.^M
motorcycle is cheap than car.
This window is clear.
[root@node-135 yurq]# egrep -i -C2 'good' regular_express.txt
"Open Source" is a good mechanism to develop programs.
apple is my favorite food.
Football game is not use feet only.
--
Her hair is very beauty.^M
I can't finish the test.^M
Oh! The soup taste good.^M
motorcycle is cheap than car.
This window is clear.
9.2 egrep和grep的区别
egrep和grep是Linux命令行中最常用的文本搜索工具,它们的功能有很大的相似性,但也有一些明显的不同之处,这些不同之处会影响到它们的使用方式。下面就从功能、参数、应用场景等角度来探讨egrep与grep的区别。
- 功能方面:grep是一种强大的文本搜索工具,它使用
基础正则表达式来搜索文本,egrep是一种增强版的grep,它使用更多的正则表达式来搜索文本,比如可以使用更多的元字符,更多的重复模式,更多的可选项等。 - 参数方面:egrep支持更多的参数,它比grep支持更多的选项,可以更灵活地处理文件;
- 应用场景方面:egrep适用于需要精确搜索的场景,例如搜索某个字符串出现的次数,而grep则适用于简单的文本搜索。
延伸型正规表示法可以透过群组功能『 | 』来进行一次搜寻!那个在单引号内的管线意义为『或 or』啦! 是否变的更简单呢?此外,grep 预设仅支持基础正规表示法,如果要使用延伸型正规表示法,你可以使用 grep -E , 不过更建议直接使用 egrep !直接区分指令比较好记忆!其实 egrep 与 grep -E 是类似命令别名的关系啦!
熟悉了正规表示法之后,到这个延伸型的正规表示法,你应该也会想到,不就是多几个重要的特殊符号吗? ^_^y 是的~所以,我们就直接来说明一下,延伸型正规表示法有哪几个特殊符号?由于底下的范例还是有使用到 regular_express.txt ,不巧的是刚刚我们可能将该文件修改过了 @_@,所以,请重新下载该文件来练习喔!
9.3 延伸型的正规表示法的特殊字符
| RE 字符 | 意义与范例 |
|---|---|
| + | 意义:重复『一个或一个以上』的前一个 RE 字符 范例:搜寻 (god) (good) (goood)… 等等的字符串。 那个 o+ 代表『一个以上的 o 』所以,底下的执行成果会将第 1, 9, 13 行列出来。 egrep -n 'go+d' regular_express.txt |
| ? | 意义:『零个或一个』的前一个 RE 字符 范例:搜寻 (gd) (god) 这两个字符串。 那个 o? 代表『空的或 1 个 o 』所以,上面的执行成果会将第 13, 14 行列出来。 有没有发现到,这两个案例( ‘go+d’ 与 ‘go?d’ )的结果集合与 ‘go*d’ 相同?想想看,这是为什么喔! ^_^ egrep -n 'go?d' regular_express.txt |
| | | 意义:用或( or )的方式找出数个字符串 范例:搜寻 gd 或 good 这两个字符串,注意,是『或』! 所以,第 1,9,14 这三行都可以被打印出来喔!那如果还想要找出 dog 呢? egrep -n 'gd|good' regular_express.txtegrep -n 'gd|good|dog' regular_express.txt |
| () | 意义:找出『群组』字符串 范例:搜寻 (glad) 或 (good) 这两个字符串,因为 g 与 d 是重复的,所以,我就可以将 la 与 oo 列于 ( ) 当中,并以 | 来分隔开来,就可以啦! egrep -n 'g(la|oo)d' regular_express.txt |
| ()+ | 意义:多个重复群组的判别 范例:将『AxyzxyzxyzxyzC』用 echo 叫出,然后再使用如下的方法搜寻一下! echo 'AxyzxyzxyzxyzC' | egrep 'A(xyz)+C'上面的例子意思是说,我要找开头是 A 结尾是 C ,中间 有一个及以上的 “xyz” 字符串的意思~ |
()+示例,可以看到只能完整匹配xyz的一个及以上
[root@node-135 yurq]# echo 'AxyzxyzxyzxyzC' | egrep 'A(xyz)+C'
AxyzxyzxyzxyzC
[root@node-135 yurq]# echo 'AxyzC' | egrep 'A(xyz)+C'
AxyzC
[root@node-135 yurq]# echo 'AxyzxyzxyzxyzC' | egrep 'A(x)+C'
[root@node-135 yurq]# echo 'AxyzxyzxyzxyzC' | egrep 'A(yzx)+C'
[root@node-135 yurq]#
另外,要特别强调的是,那个 ! 在正规表示法当中并不是特殊字符, 所以,如果你想要查出来文件中含有 ! 与 > 的字行时,可以这样:
grep -n '[!>]' regular_express.txt
这样可以了解了吗?常常看到有陷阱的题目写:『反向选择这样对否? '[!a-z]'?』, 呵呵!是错的呦~要 '[^a-z]' 才是对的!
匹配重复字符(用法和grep不同)
要匹配重复出现的字符,可以使用 *、+ 或 ? 符号。例如,要匹配重复出现的字母 “o”,可以运行以下命令:
egrep 'o*' example.txt # 匹配0个或多个"o"
egrep 'o+' example.txt # 匹配1个或多个"o"
egrep 'o?' example.txt # 匹配0个或1个"o"
匹配分组模式(用法和grep不同)
要匹配分组模式,可以使用小括号 ()。例如,要匹配 “good” 或 “glad”,可以运行以下命令:
[root@node-135 yurq]# egrep 'g(oo|la)d' regular_express.txt
"Open Source" is a good mechanism to develop programs.
Oh! The soup taste good.^M
The world <Happy> is the same with "glad".
匹配’或’模式(用法和grep不同)
[root@node-135 yurq]# egrep 'good|glad' regular_express.txt
"Open Source" is a good mechanism to develop programs.
Oh! The soup taste good.^M
The world <Happy> is the same with "glad".
匹配重复群组(用法和grep不同)
g和d之间仅能出现o
[root@node-135 yurq]# egrep 'g(o)+d' regular_express.txt
"Open Source" is a good mechanism to develop programs.
Oh! The soup taste good.^M
Oh! My god!
该系列目录 --> 【BASH】回顾与知识点梳理(目录)
相关文章:
【BASH】回顾与知识点梳理(九)
【BASH】回顾与知识点梳理 九 九. 扩展正则表达式(延伸正规表示法)9.1 egrep命令语法匹配指定模式的行(用法和grep相同)忽略大小写匹配(用法和grep相同)反向匹配(用法和grep相同)显示行号(用法和grep相同)递归搜索目录(用法和grep相同)匹配整词(用法和grep相同)统计匹配行数(用…...
Android 版本 对应的 API版本
Android 14(开发者预览版) 如需详细了解平台变更,请参阅 Android 14 文档。 Android 13(API 级别 33) 如需详细了解平台变更,请参阅 Android 13 文档。 Android 12(API 级别 31、32…...
Django 异常信息 E302 expected 2 blank lines, found 1
在Django中,PEP 8风格指南建议在任何类定义之前都应该有两个空白行,包括视图(views)。错误信息"E302 expected 2 blank lines, found 1"表示在类定义之前只有一个空白行,而Django希望有两个空白行。 要修复…...
2019年09月《全国青少年软件编程等级考试》Python一级真题解析
一、单选题 第1题 关于Python的编程环境,下列的哪个表述是正确的? A:Python的编程环境是图形化的; B:Python只有一种编程环境ipython; C:Python自带的编程环境是IDLE; D&#…...
mybatis如何防止SQL注入
阅读正文: mybatis是如何防止SQL注入的 1、首先看一下下面两个sql语句的区别: <select id"selectByNameAndPassword" parameterType"java.util.Map" resultMap"BaseResultMap"> select id, usernam…...
DoIP学习笔记系列:(三)用CAPL脚本过“安全认证”,$27服务实现
文章目录 1. 如何调用接口通过安全认证?如何新建CAPL工程,在此不再赘述,本章主要分享一下如何在CAPL中调用DoIP接口、diag接口进行DoIP和诊断的测试。 注意:CANoe工具本身的使用没什么难的,所谓会者不难难者不会,各位小伙伴有疑问要多问,多交流,往往难事都只是一层窗户…...
【Linux】多路转接 -- select函数
文章目录 1. 认识select函数2. select函数原型3. socket就绪条件4. select工作流程5. select服务器6. select的优缺点 首先我们要了解一下,什么是多路转接? 多路转接也叫多路复用,是一种用于管理多个IO通道的技术。它能实现同时监听和处理多个…...
ospf于mgre中应用(直连与星型拓扑)
题目 地址配置 R1: R2: R3: R4: R5: ISP: R1/2/3的星型拓扑结构 R1配置: interface Tunnel0/0/0 ip address 192.168.6.1 255.255.255.0 tunnel-protocol gre p2mp source 200.1.1.1 ospf …...
Web压测工具http_load原理分析
01、前言 http_load是一款测试web服务器性能的开源工具,从下面的网址可以下载到最新版本的http_load: http://www.acme.com/software/http_load/ 这个软件一直在保持着更新(不像webbench,已经是十年的老古董了。 webbench的源…...
flask------消息闪现 flash
1介绍 flask提供了一个非常有用的flash()函数,它可以用来“闪现”需要提示给用户的消息,比如当用户登录成功后显示“欢迎回来!”。在视图函数调用flash()函数,传入消息内容,flash()函数把消息存…...
【C++】数据结构与算法:常用查找算法
😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍常用查找算法。 学其所用,用其所学。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下次更新不迷路…...
【Spring Cloud 六】Hystrix熔断
这里写目录标题 系列文章目录背景一、Hystrix是什么服务雪崩服务容错的相关概念熔断器降级超时控制限流 二、会什么要有Hystrix三、如何使用Hystrix进行熔断处理整体项目代码服务提供者pom文件yml配置文件启动类controller 服务消费者pom文件yml配置文件启动类feignhystrixcont…...
FTP使用教程
FTP使用教程 目录 一.FTP简介二.FTP搭建三.FTP使用 一.FTP简介 FTP中文为文件传输协议,简称为文传协议。它也是一个应用程序,不同的操作系统有不同的FTP应用程序,这些应用程序都遵守同一种协议以…...
网络安全(黑客技术)自学
1.网络安全是什么 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 2.网络安全市场 一、是市场需求量高; 二、则是发展相对成熟…...
使用公式与格式控制Excel快速实现计划甘特图
项目中都会遇到做任务计划的需求,有的客户要求需要有甘特图的形式本文介绍如何使用excel 单元格实现甘特图显示,调整任务时间自动填充单元格填色实现甘特图效果。废话不多说,先看效果。 准备工作先创建两列开始时间与完成时间,这…...
ChatGPT即将取代程序员
W...Y的主页 相信ChatGPT大家已经都不陌生,我们经常会在工作和学习中应用。但是ChatGPT的发展速度飞快。功能也越来越全面。ChatGPT的文章也是层次不穷的出现,ChatGPT即将取代程序员的消息也铺天盖地。那ChatGPT真的会取代程序员吗?我们是否…...
opencv-33 图像平滑处理-中值滤波cv2.medianBlur()
中值滤波是一种常见的图像处理滤波技术,用于去除图像中的噪声。它的原理是用一个滑动窗口(也称为卷积核)在图像上移动,对窗口中的像素值进行排序,然后用窗口中像素值的中值来替换中心像素的值。这样,中值滤…...
跟CZY一起深入理解C++(1)-一些基础知识
跟CZY一起深入理解C些基础知识 常量constconstexpr 初始化枚举与枚举类分离编译 常量 const 常量亦即不可改变的量(实际上可以暴力破解),那么常量在C中主要有以下几种应用场景 定义常量变量 //如果有以下情况,在GCC上能够破解,而在MSVC上不会改变 // int放在栈区,实际上是可…...
bash变量和参数介绍
bash变量和参数介绍 概述 变量可以让程序和脚本语言用来描述数据。一个变量仅仅是一个标签而已,被指定到计算机内存中存储着数据的某个位置或某些位置的标签。变量一般出现在算术运算操作和数量操纵及字符串解析中。 4.1. 变量替换(Variable Substitution) 变量的名…...
Qt 信号与槽
信号与槽(signal & slot)是Qt编程的基础,使Qt中处理界面各个组件的交互操作变得更加直观和简单。 信号(Signal)就是在特定情况下被发射的事件,如PushButton最常见的信号就是鼠标单击时发射的clicked()…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...
【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...
LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...
