Linux:shell脚本:基础使用(4)《正则表达式-grep工具》

正则表达式定义:

        使用单个字符串来描述,匹配一系列符合某个句法规则的字符串

正则表达式的组成:

        普通字符串: 大小写字母,数字,标点符号及一些其他符号

        元字符:在正则表达式中具有特殊意义的专用字符

正则表达式不能单独使用,需要配合一些命令 如 grep sed 等命令 


正则表达式

我们先创建一个文件用于测试

he was short and fat.
He was wearing a blue polo shirt with black pants.
The home of Football on BBC Sport online.
the tongue is boneless but it breaks bones.12!
google is the best tools for search keyword.
The year ahead will test our political establishment to the li
PI=3.141592653589793238462643383249901429
a wood cross!
Actions speak louder than words

#woood #
#woooooood #
AxyzxyzxyzxyzC
I bet this place is really spooky late at night!
Misfortunes never come alone/single.
I shouldn't have lett so tast.

以上字符是我准备的一个文件的内容,等会我们用grep命令使用正则表达式去检索内容

 文件名称无所谓,我的叫tarro.txt


 grep

 我们使用grep查询里面某一个指定的字符串  the

grep 'the' tarro.txt  

里面每行带有the字符串的就出来了

如果想知道我们查找的字符串在第几行 

grep -n 'the' tarro.txt  

前面的数字就是在文件里的行,也就是这段在文件中的几行几行

如果想知道在文件中第几行,并且不区分大小写,也就是我们指定的字符串无论大小写都展示出来

grep -in 'the' tarro.txt 

这样我们查找出来的就不区分大小写了,即使我们查的是小写the,加了-i 那么大写小写都会有

 如果正好相反我们不想查包含指定字符串的行

grep -nv 'the' tarro.txt 

-v就是反向查找,我们后面指定的字符串就反过来,就查找不带他们的行,反向查找不包含the的行


 利用中括号[]来查找集合字符

[] ---里面无论有几个字符,都仅代表一个字符,为‘或’关系
[^]   --- 括号里面的‘^’是取反的意思

查找包含shirt 或short的行 

grep -n 'sh[io]rt' tarro.txt

可以看到他们中级的字符不一样,我们使用了查找  以sh  开通  rt结尾,中间o或者i  两个就全出来了

查找重复单个字符‘oo’的行

grep -n 'oo' test.txt 

里面只要是两个oo相连的字符串就被查询出来了 

查找‘oo’前不是‘w’的行 

grep -n '[^w]oo' tarro.txt 

去掉了w开头的,那为什么#woood # 和 #woooooood # 没被去掉,因为他们相连的字符串是以#开头的,你可以和上一个比对一下

查找‘oo’前不是小写字母的行 

grep -n '[^a-z]oo' tarro.txt

现在前面小写的a-z开通的都被去掉了,F是大写的所以还在 

查找‘oo’前不是大写字母的行

grep -n '[^A-Z]oo' tarro.txt 

刚刚那个F开头的就没了,就剩下一些小写开头的行了

查找包含数字的行

 grep -n '[0-9]' tarro.txt 

上图只要是行内带有数字的行就被查出来了 

 查找行首^与行尾字符$

小数点‘.’在正则表达式中为元字符,需要使用转义字符‘\’将其转化为普通字符

查找以小数点‘.’结尾的行。

grep -n '\.$' tarro.txt

查找空行 

grep -n '^$' test.txt 

查找以‘w’开头,‘d’结尾共4个字符的行 

grep -n 'w..d' tarro.txt

查询至少包含两个o以上的字符串

grep -n 'ooo*' tarro.txt  

查找以‘w’开头,中间至少包含一个‘o'的,‘d’结尾的行

grep -n 'woo*d' tarro.txt  

查找以‘w’开头,‘d’结尾 中间字符可有可无 的行 

grep -n 'w.*d' test.txt 

查询任意数字的行 

grep -n '[0-9][0-9]*' test.txt 


  查找连续字符范围{}

使用'.' 和'*'可以设置零个或无限多个重复的字符
如果要限制一个范围则使用‘{}’

查看2个o的字符 

grep -n 'o\{2\}' test.txt 

查看w开头,d结尾,中间为2-5个o的字符串
grep -n 'wo\{2,5\}d' test.txt 

查看w开头,d结尾,中间为2以上o的字符串
grep -n 'wo\{2,\}d' test.txt  


基础正则表达式的常见元字符

\b   单词的开头或结尾,只匹配一个位置,不匹配分隔标点符号和空格    \bHello\b
\d   一个数字,等价于 [0-9]    0\d\d-\d{8} 固定电话
*      数量,它前面的内容以连续使用的任意次数以达到整个表达式匹配,可以是0次匹配  .* 
+     和* 类似,但至少匹配1次, 匹配一个或多个     \d+
?    和上面两个类似,重复0次或一次
.      匹配除了换行符以外任意字符  
\s    匹配任意的空白符、制表符、换行符、中文全角空格等
\w 匹配字母、数字、汉字或者下划线
^   用来查找的字符串的开头   ^\d{5,12}$    5~12位的QQ
$   用来查找的字符串的结尾
{n}       前面必须连续重复匹配n次,\d{8}   \bw{6}\b 刚好6个字符的单词
{n,m}   前面必须连续重复匹配n~m次,
{n,}       前面必须连续重复匹配n~更多次,
\   如果需要查找元字符,需要转义 
[]   里面的字符可以不用转义,用来定义匹配集合   [?.*()]

3.扩展正则表达式----egrep、awk命令支持
3.1 扩展正则表达式的常见元字符
+        重复一个或者一个以上的前一个字符

?        零个或者一个的前一个字符

|        使用或者(or)的方式找出多个字符

()        查找“组”字符串

()+        辨别多个重复的组

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

易服客工作室:UberMenu WordPress插件 - 网站超级菜单插件

UberMenu WordPress插件是一个用户友好、高度可定制、响应迅速的 Mega Menu WordPress 插件。它与 WordPress 3 菜单系统一起开箱即用,易于上手,但功能强大,足以创建高度定制化和创意的大型菜单配置。 网址: UberMenu WordPress插件 - 网站超…

【Git】(三)回退版本

1、git reset命令 1.1 回退至上一个版本 git reset --hard HEAD^ 1.2 将本地的状态回退到和远程的一样 git reset --hard origin/master 注意:谨慎使用 –-hard 参数,它会删除回退点之前的所有信息。HEAD 说明:HEAD 表示当前版本HEAD^ 上…

《内网穿透》无需公网IP,公网SSH远程访问家中的树莓派

文章目录 前言 如何通过 SSH 连接到树莓派步骤1. 在 Raspberry Pi 上启用 SSH步骤2. 查找树莓派的 IP 地址步骤3. SSH 到你的树莓派步骤 4. 在任何地点访问家中的树莓派4.1 安装 Cpolar内网穿透4.2 cpolar进行token认证4.3 配置cpolar服务开机自启动4.4 查看映射到公网的隧道地…

如何使用SpringBoot 自定义转换器

😀前言 本篇博文是关于SpringBoot 自定义转换器的使用,希望你能够喜欢😊 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的…

数据链路层

数据链路层和网络层的对比 如果说网络层实现的是路由的功能,那么数据链路层就是实打实的实现具体的传输。 就像导航,网络层告诉我们下一步该去哪个主机,而数据链路层则是实现去下一个主机的方法。 网络层的IP地址告诉我们目的地在哪里&#x…

PostgreSQL-UDF用户自定义函数-扩展插件

PostgreSQL-UDF用户自定义函数-扩展插件 零、前置条件 ggcpostgresql 一、创建 .c 和 .sql 文件 创建.c文件 进入PG源码的contib/目录下面,这个目录下面都是用于PG进行功能扩展的插件。创建我们的插件(UDF同义词:插件;扩展&a…

gitee(码云)如何生成并添加公钥,以及配置用户信息

一,简介 在使用Gitee的时候,公钥是必须的,无论是克隆还是上传。本文主要介绍如何本地生成和添加公钥到服务器,然后配置自己的用户信息,方便日后拉取与上传代码。 二,步骤介绍 2.1 本地生成公钥 打开git ba…

【SpringBoot】| 接口架构风格—RESTful

目录 一:接口架构风格—RESTful 1. 认识RESTful 2. RESTful 的注解 一:接口架构风格—RESTful 1. 认识RESTful (1)接口 ①接口: API(Application Programming Interface,应用程序接口&…

Django的简介安装与配置及两大设计模式

一.Djang的介绍 1.Django是什么 Django 是使用 Python 语言开发的一款免费而且开源的 Web 应用框架。 由于 Python 语言的跨平台性,所以 Django 同样支持 Windows、Linux 和 Mac 系统。 在 Python 语言炽手可热的当下,Django 也迅速的崛起,在…

文件的导入与导出

文章目录 一、需求二、分析1. Excel 表格数据导出2. Excel 表格数据导入一、需求 在我们日常开发中,会有文件的导入导出的需求,如何在 vue 项目中写导入导出功能呢 二、分析 以 Excel 表格数据导出为例 1. Excel 表格数据导出 调用接口将返回的数据进行 Blob 转换,附: 接…

【LangChain】P1 LangChain 应用程序的核心构建模块 LLMChain 以及其三大部分

LangChain 的核心构建模块 LLMChain LangChain 应用程序的核心构建模块语言模型 - LLMs提示模板 - Prompt templates输出解析器 - Output Parsers LLMChain 组合 LangChain 应用程序的核心构建模块 LangChain 应用程序的核心构建模块 LLMChain 由三部分组成: 语言…

前端原生写自定义旋转变换轮播图

html部分&#xff1a; <div class"banner_box"><div class"swiperWrapper" v-show"bannerList.length>0"><div class"swiper-item" :id"swiperSlide${index}" :class"{active:index0,next:index1,pr…

深度学习实战基础案例——卷积神经网络(CNN)基于SqueezeNet的眼疾识别|第1例

文章目录 前言一、数据准备1.1 数据集介绍1.2 数据集文件结构 二、项目实战2.1 数据标签划分2.2 数据预处理2.3 构建模型2.4 开始训练2.5 结果可视化 三、数据集个体预测 前言 SqueezeNet是一种轻量且高效的CNN模型&#xff0c;它参数比AlexNet少50倍&#xff0c;但模型性能&a…

Springboot写单元测试

导入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintag…

Python学习笔记_基础篇(七)_常用模块

模块&#xff0c;用一砣代码实现了某个功能的代码集合。 类似于函数式编程和面向过程编程&#xff0c;函数式编程则完成一个功能&#xff0c;其他代码用来调用即可&#xff0c;提供了代码的重用性和代码间的耦合。而对于一个复杂的功能来&#xff0c;可能需要多个函数才能完成…

机器人CPP编程基础-03变量类型Variables Types

机器人CPP编程基础-02变量Variables 全文AI生成。 C #include<iostream>using namespace std;main() {int a10,b35; // 4 bytescout<<"Value of a : "<<a<<" Address of a : "<<&a <<endl;cout<<"Val…

详细记录Pycharm配置已安装好的Conda虚拟环境

当安装好conda环境之后&#xff0c;想要在Pycharm中使用&#xff0c;那么就要在Pycharm中导入&#xff0c;我这里使用的pycharm-professional-2023.2这个版本&#xff0c;下面是详细步骤&#xff1a; 1.打开File->Settings&#xff1a; 2.找到Project——>Python Inter…

网络层协议

网络层协议 IP协议基本概念协议头格式网段划分特殊的IP地址IP地址的数量限制私有IP地址和公网IP地址路由IP协议头格式后续 在复杂的网络环境中确定一个合适的路径 IP协议 承接上文&#xff0c;TCP协议并不会直接将数据传递给对方&#xff0c;而是交付给下一层协议&#xff0c;…

LeetCode Top100 Liked 题单(序号34~51)

​34. Find First and Last Position of Element in Sorted Array ​ 题意&#xff1a;找到非递减序列中目标的开头和结尾 我的思路 用二分法把每一个数字都找到&#xff0c;最后返回首尾两个数 代码 Runtime12 ms Beats 33.23% Memory14 MB Beats 5.16% class Solution {…

ssh远程连接服务器

一、远程连接服务器简介 二、连接加密技术简介 三、ssh服务配置 四、用户登录ssh服务 Enforcing会强制限制&#xff0c;如端口为22&#xff0c;可以访问&#xff0c;如果是2000端口&#xff0c;不能使用 Permissive是宽容的模式&#xff0c;不限制使用端口 Enforcing会重启失败…
最新文章