Linux三剑客-sed、awk、egrep(上)

一、知识梗概

二、正则表达式

定义:正则表达式是一种强大的文本处理工具,用于在文本中搜索符合特定模式的字符串。它由一系列特殊字符和普通字符组成,可以定义复杂的搜索模式。正则表达式被广泛应用于各种编程语言和文本处理工具中。

简单来说就是文本匹配:可以根据你定义的表达式抓取到你想要的东西,实现文本匹配、文本查找以及文本替换等功能的一种工具。

1、通配符

*    匹配0个或者多个字符

?    匹配一个字符
[...]    匹配范围内的任意一个字符  
    --> [0-9] 0到9任意一个字符
    --> [^0-9] 不属于0-9的任意字符
    --> [abc] 取a或者b或者c
    --> [a-z]取字母a-z之间的字符
{}    组合匹配

举例使用:

#使用{}组合匹配符,中间用逗号隔开,匹配相应数字
[root@localhost 10-17]# mkdir yuhengxing{1,6,99}
[root@localhost 10-17]# ls
yuhengxing1  yuhengxing6  yuhengxing99
#使用{11..15}表示匹配11-15的所有数字
[root@localhost 10-17]# mkdir yuhengxing{11..15}
[root@localhost 10-17]# ls
yuhengxing1   yuhengxing12  yuhengxing14  yuhengxing6
yuhengxing11  yuhengxing13  yuhengxing15  yuhengxing99

2、元字符

有特殊含义的字符,可以表示其他含义如:!  $  ^等

后面会举例子用到,和egrep一起使用。

三、egrep

1、grep和egrep的区别

egrep比grep更好用,grep支持基本正则,egrep还支持扩展正则(有:|  {}  )

比如,egrep可以解析管道符号:
egrep会将“|”理解为“或者”,查找xiaomi或者huawei的文本:

#这里的 “-i”选项表示忽略大小写
#egrep就能理解管道符号,解析为“或者”
[root@localhost 10-17]# egrep -i "xiaomi|huawei" mobile_phone.txt 
xiaomi	HUAWEI
VIVO	huawei

grep就不能理解“|”,而是忽略大小写,查找xiaomi|huawei整体,所以没有找到任何东西:

[root@localhost 10-17]# grep -i "xiaomi|huawei" mobile_phone.txt 
[root@localhost 10-17]# 

要想使得grep与egrep效果相同,则:

grep -E = egrep

2、egrep的选项

-i         忽略大小写

-o        仅仅展示要查找的内容

-n        显示行号

-v        取反,对整行取反匹配

-i在上面使用过,所以这里举例说明下面三个怎么使用:

#这里的 mobile_phone.txt 文本中,VIVO huawei这个是同一行的内容,所以都显示出来了
[root@localhost 10-17]# egrep -i "xiaomi|huawei" mobile_phone.txt 
xiaomi	HUAWEI
VIVO    huawei
#加上-o选项之后,同一行的VIVO就不在展示出来
[root@localhost 10-17]# egrep -o -i "xiaomi|huawei" mobile_phone.txt 
xiaomi
HUAWEI
huawei#获取passwd中含有“root”的内容,-n就显示在哪一行
[root@localhost 10-17]# cat /etc/passwd |egrep "root" -n
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
#第一行和第十行有root#所有没有root的行都会被输出:
[root@localhost 10-17]# cat /etc/passwd |egrep "root" -v

3、正则表达式和egrep的使用

正则的分类:

基本正则:^    $    .    *
扩展正则:|    +    ?    {}

感受一下正则与egrep的使用:

#查找网址正则:
[root@localhost 10-17]# cat web.txt |egrep "[a-Z]+://[0-z]+\.[0-Z]+\.[0-Z]+"
#查找邮箱正则:
[root@localhost 10-17]# cat mail.txt |egrep "[0-Z_]+@[0-Z]+\.[a-Z]+"
#查找ip的正则:
[root@localhost 10-17]# cat /var/log/secure |egrep "(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9])"

扩展正则:
?    0个或者1个前面的字符:
*    0个或者多个前面的字符:
+    至少一个前面的字符
{n}    至少出现n次前面的字符
{n1,n2}    至少出现n1到n2次前面的字符

^$    代表空行
.    代表任意单个字符
.*    代表所有字符
*    代表前面的字符出现0个或多个

[root@localhost 10-17]# echo "aaaaabbbbbbccc"|egrep "b*"
aaaaabbbbbbccc
[root@localhost 10-17]# echo "aaaaabbbbbbccc"|egrep ".*"
aaaaabbbbbbccc

如有问题欢迎评论区或后台留言

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

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

相关文章

【Docker】docker原理及使用-1

Docker目录 1️⃣概念2️⃣使用容器的好处2️⃣docker和普通软件启动方式的区别2️⃣docker和传统虚拟机的区别 1️⃣下载安装2️⃣安装步骤 1️⃣必须要掌握的核心概念1️⃣命令2️⃣例子2️⃣练习题目2️⃣进入一下python环境(简洁) 1️⃣解释一下 redis1️⃣docker底层隔离机…

C语言 | Leetcode C语言题解之第30题串联所有单词的子串

题目: 题解: typedef struct {char key[32];int val;UT_hash_handle hh; } HashItem;int* findSubstring(char * s, char ** words, int wordsSize, int* returnSize){ int m wordsSize, n strlen(words[0]), ls strlen(s);int *res (int *)mall…

卫星影像联合无人机实现农业保险全生命周期监管监测

随着科技的进步,农业保险监管系统的发展日新月异。特别是近年来,随着卫星技术与无人机技术的结合,为农业保险监管系统带来了前所未有的革新。本文将深入探讨如何利用卫星与无人机方案构建高效的农业保险监管系统,并结合实例进行说…

机器学习-09-图像处理01-理论

总结 本系列是机器学习课程的系列课程,主要介绍机器学习中图像处理技术。 参考 02图像知识 色彩基础知识整理-色相、饱和度、明度、色调 图像特征提取(VGG和Resnet特征提取卷积过程详解) Python图像处理入门 【人工智能】PythonOpenCV…

嵌入式MCU BootLoader开发配置详细笔记教程

目录 一、BootLoader基础 二、BootLoader原理及配置 三、BootLoader程序 bootloader.h bootloader.c 四、Application1 用户程序 application1.h application1.c 五、Application2 用户程序 application2.h 六、程序运行效果 七、工程文件Demo 一、BootLoader基础 …

项目5-博客系统5+程序部署(Linux基本使用)

1.Linux的基本使用 1.1 Linux 是什么 Linux 是⼀个操作系统. 和 Windows 是 "并列" 的关系. 1.2 Unix & Linux 发展历程图 1.1969−1970 年, ⻉尔实验室的 Dennis Ritchie (左) 和 Ken Tompson (右) 开发了 Unix 操作系统. 2. Unix ⽕了之后, 衍⽣出很多的分⽀…

【C++进阶】RAII思想&智能指针

智能指针 一,为什么要用智能指针(内存泄漏问题)内存泄漏 二,智能指针的原理2.1 RAII思想2.2 C智能指针发展历史 三,更靠谱的shared_ptr3.1 引用计数3.2 循环引用3.3 定制删除器 四,总结 上一节我们在讲抛异…

嵌入式单片机 TTL电平、232电平、485电平的区别和联系

一、简介 TTL、232和485是常见的串口通信标准,它们在电平和通信方式上有所不同, ①一般情况下TTL电平应用于单片机外设,属于MCU/CPU等片外外设; ②232/485电平应用于产品整体对外的接口,一般是片外TTL串口转232/485…

MYSQL执行过程和顺序详解

一、前言 1.1、说明 就MySQL在执行过程、sql执行顺序,以及一些相关关键字的注意点方面的学习分享内容。 在参考文章的基础上,会增加自己的理解、看法,希望本文章能够在您的学习中提供帮助。 如有错误的地方,欢迎指出纠错&…

使用spring-ai快速对接ChatGpt

什么是spring-ai Spring AI 是一个与 Spring 生态系统紧密集成的项目,旨在简化在基于 Spring 的应用程序中使用人工智能(AI)技术的过程。 简化集成:Spring AI 为开发者提供了方便的工具和接口,使得在 Spring 应用中集…

网络篇09 | 运输层 udp

网络篇09 | 运输层 udp 01 简介UDP 是面向报文的 02 报文协议 01 简介 UDP 只在 IP 的数据报服务之上增加了一些功能:复用和分用、差错检测 UDP 的主要特点:无连接。发送数据之前不需要建立连接。 使用尽最大努力交付。即不保证可靠交付。 面向报文。…

【c 语言】函数前面的返回类型

🎈个人主页:豌豆射手^ 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:C语言 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步&…