【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.txt
egrep -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】回顾与知识点梳理(目录)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/23822.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

visual studio 生成dll文件以及修改输出dll文件名称操作

目录 visual studio 生成dll文件以及修改dll文件名称一、准备测试代码二、设置导出dll属性三、生成dll文件 .lib .dll .pdb 的简单介绍dll文件使用方式lib文件使用方式1、动态链接 &#xff08;原理&#xff09;2、静态链接&#xff1a; visual studio 生成dll文件以及修改dll文…

基于DiscordMidjourney API接口实现文生图

https://discord.com/api/v9/interactions 请求头&#xff1a; authorization:取自 浏览器中discord 文生图请求头中的 authorization 的值 Content-Type:application/json 请求体&#xff1a; {“type”:2,“application_id”:“93692956130267xxxx”,“guild_id”:“1135900…

Qt Creator中designer使用QWebEngine异常排查

Qt Creator中designer使用QWebEngine异常排查 1、前提背景 最近由于版权的原因&#xff0c;我们采取了自编译的Qt Creator。编译完成之后启动Qt Creator刚开始一切都是很顺利。 但是在Creator中打开designer&#xff0c;使用QWebEngine控件就发生了异常&#xff0c;Qt Creat…

「从零入门推荐系统」22:chatGPT、大模型在推荐系统中的应用

作者 | gongyouliu 编辑 | gongyouliu 提示&#xff1a;全文2.5万字&#xff0c;预计阅读时长2小时&#xff0c;可以先收藏再慢慢阅读。 我们在上一章介绍了chatGPT、大模型的基本概念、核心技术原理等基础知识&#xff0c;有了这些背景知识的铺垫&#xff0c;下面我们来介绍ch…

复现sci顶刊中的画中画(局部细节放大)

简介 小编在撰写学术论文时&#xff0c;为了突出所提模型的优越性&#xff0c;你可以通过放大图形中的局部位置来进行比较。尽管从全局来看&#xff0c;各个方法的拟合效果都还不错&#xff0c;但通过放大图中的特定区域&#xff0c;可以更清楚地展示所提模型相对于其他模型的…

Flutter Provider 共享状态管理

在使用Provider的时候&#xff0c;我们主要关心三个概念&#xff1a; ChangeNotifier&#xff1a;真正数据&#xff08;状态&#xff09;存放的地方ChangeNotifierProvider&#xff1a;Widget树中提供数据&#xff08;状态&#xff09;的地方&#xff0c;会在其中创建对应的Ch…

HTML5中Canvas学习笔记:Canvas

目录 一、HTML中Canvas画图strokeStyle 和 fillStyle 的区别是什么&#xff1f; 二、如何设置一幅canvas图中某个颜色透明&#xff1f; 三、H5 canvas中strokeRect参数如果是小数&#xff0c;如何处理&#xff1f; 四、H5 Canvas中如何画圆角矩形框&#xff1f; 一、HTML中…

海外应用商店优化实用指南之关键词

和SEO一样&#xff0c;关键词是ASO中的一个重要因素。就像应用程序标题一样&#xff0c;在Apple App Store和Google Play中处理应用程序关键字的方式也有所不同。 关键词研究。 对于Apple&#xff0c;我们的所有关键词只能获得100个字符&#xff0c;Google Play没有特定的关键…

STL空间配置器入门

STL简介   STL&#xff08;Standard Template Library&#xff0c;标准模板库&#xff09;&#xff0c;从根本上说&#xff0c;STL是一些“容器”的集合&#xff0c;这些“容器”有list,vector,set,map等&#xff0c;STL也是算法和其他一些组件的集合。 谈及组件&#xff0c…

Linux一阶段复习

Linux之父是林纳斯本纳第克特托瓦兹 Apache发布目录&#xff1a;/var/www/html nginx发布目录&#xff1a;/usr/share/nginx/html/ 配置dns的文件 &#xff1a; /etc/resolv.conf nginx的配置文件&#xff1a;/etc/nginx/ yum源的配置文件&#xff1a;/etc/yum.repos.d/ …

8.5day06 框架基础--反射+注解

文章目录 反射获取类的各种信息获取类的字节码文件 注解元注解 复习redis两道算法题 摆烂了&#xff0c;不想学啦&#xff01;&#xff01;&#xff01; 反射 反射主要用来做框架; 学习内容 获取类的各种信息 第一步 加载类&#xff0c;获取类的字节码文件 第二步 获取类的…

IDEA基础使用

IDEA基础使用 1、IDEA中显示用法和用户截图展示有调用显示无调用显示 对应方法 2、如何找出项目中所有不被调用方法截图展示对应方法 3、常用代码(Code)说明及快捷键:4、未完待续待日后更新。。。总结&#xff1a;欢迎指导&#xff0c;也祝码友们代码越来越棒&#xff0c;技术越…

AMEYA360:瑞萨电子MCU和MPU产品线将支持Microsoft Visual Studio Code

全球半导体解决方案供应商瑞萨电子宣布其客户现可以使用Microsoft Visual Studio Code&#xff08;VS Code&#xff09;开发瑞萨全系列微控制器&#xff08;MCU&#xff09;和微处理器&#xff08;MPU&#xff09;。瑞萨已为其所有嵌入式处理器开发了工具扩展&#xff0c;并将其…

个人隐私保护

文章目录 一、互联网生存指南&#xff1a;通过哪些方法来加强个人信息保护&#xff1f;二、个人信息保护与数字经济发展的关系应该如何平衡&#xff1f;三、互联网公司如何处理数据隐私&#xff1f;四、如何加强个人隐私教育和意识&#xff1f; 一、互联网生存指南&#xff1a;…

月报总结|Moonbeam 7月份大事一览

炎炎夏日&#xff0c;Moonbeam于越南举办了线下交流会&#xff0c;在EthCC 2023和以太坊社区成员共同讨论多链应用&#xff0c;在Polkadot Decoded中分享了Moonbeam的与众不同之处。 Bear Necessities Hackathon也于本月圆满结束&#xff0c;选出了每个赛道最杰出的项目&#…

CMake:检测python解释器和python库

CMake:检测python解释器和python库 导言检测python解释器CMakeLists.txt输出附录 检测python库项目结构CMakeLists.txt相关源码附录 导言 python是一种非常流行的语言。许多项目用python编写的工具&#xff0c;从而将主程序和库打包在一起&#xff0c;或者在配置或构建过程中使…

C 语言的递增运算符 ++ 和递减运算符 --

递增运算符 increment operator 放在while循环的判断条件中时&#xff0c;要使用前缀形式。 代码示例&#xff1a; #include<stdio.h>int main(void) {int shoe 0;while (shoe < 18.5){printf("%d\n", shoe);}return 0; }结果&#xff1a; 1 2 3 4 5 6…

Docker Enable live

ubuntu - Enabling live restore on docker isnt keeping the containers alive - Stack Overflow容器安全之启用实时恢复 - 简书 (jianshu.com)

MCU的类型和应用领域简介

MCU&#xff08;Microcontroller Unit&#xff09;根据存储器类型可分为无片内ROM型和带片内ROM型。无片内ROM型的芯片需要外接EPROM才能应用&#xff0c;而带片内ROM型则有不同的子类型&#xff0c;如片内EPROM型、MASK片内掩模ROM型和片内Flash型。 MCU还可以按照用途分为通…

NVM Command学习

ubuntu系统安装nvme-cli&#xff0c;可以在应用层发起命令。 sudo apt install nvme-cli$ sudo nvme --help nvme-1.9 usage: nvme <command> [<device>] [<args>]The <device> may be either an NVMe character device (ex: /dev/nvme0) or an nvme …