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

news2024/9/24 21:17:55

正则表达式定义:

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

正则表达式的组成:

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

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

正则表达式不能单独使用,需要配合一些命令 如 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.coloradmin.cn/o/890287.html

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

相关文章

发掘Win10神奇工具:计划任务程序的自动化魔力

在Windows 10系统中,隐藏着许多不为人知的神奇工具,您了解多少呢?想象一下,如果有一种工具,能够像机器人一样在您设定的时间自动执行各种任务,您会不会觉得它是一件非常实用的利器?今天&#xf…

算法通关村第4关【黄金】| 表达式问题

1. 计算器问题 思路:此题不考虑括号和负数情况,单纯使用栈即可解决。注意的是数字可能是多位数需要保留完整的num, 保留数字的前缀符号,当碰到加号,存进去;当碰到减号,存相反数进去;…

【算法系列篇】双指针

文章目录 前言什么是双指针算法1.移动零1.1 题目要求1.2 做题思路1.3 Java代码实现 2.复写零2.1 题目要求2.2 做题思路2.3 Java代码实现 3.快乐数3.1 题目要求3.2 做题思路3.3 Java代码实现 4.盛最多水的容器4.1 题目要求4.2 做题思路4.3 Java代码实现 5.有效三角形的个数5.1 题…

Windows 10 20H2升级至Windows 11

关于Windows 10 20H2和21H1版本结束支持 在Windows 10中,20H2版本是Windows 10的第十个主要更新。此次升级于2020年10月20日上线。 2020年10月更新中的显著变化包括开始菜单、Microsoft Edge的改进、新的可自定义体验、通知体验的增强等。 然而&#…

Windows防火墙屏蔽恶意TCP连接

关闭所有软件(except 安全),wireshark抓包 set filtertcp,抓取所有tcp包, 抓包文件导出为tcp.txt 过滤出ip address 去掉文件头尾,执行以下程序获得ip address #cut_file.py def copy_first_10_chars(input_file, output_fil…

展会预告 | 图扑与您相约用友 2023 全球商业创新大会

为汇聚商业智慧,释放企业潜能,深入推动企业数智化转型升级,创新客户价值,让数智化在更多的企业成功,由用友主办的“2023 全球商业创新大会”,将于本月 8 月 18 日至 20 日,在上海市“国家会展中…

IT运维:使用数据分析平台监控深信服防火墙(进阶)

概述 本文主要在原文档基础上,进行了字段抽取规则、图表的优化。 字段抽取:原文档使用正则的方式,创建了多个视图,本文将改为正则键值的抽取方式,并介绍键值抽取的适用场景 图表的优化:原文使用多为简单的…

56.linux 进程管理命令和用户管理命令

目录 一、进程管理命令 1.ps 2.pstree 3.kill 4.pkill 5.&后台运行程序 6.jobs 7.fg bg 8.top 二、用户管理命令 1.系统存储用户信息的文件 2.添加新用户 3.修改用户密码 4.删除用户 一、进程管理命令 1.ps 用于查看当前系统中运行的进程信息。它可以…

thinkphp开发的在线学习培训考试模拟考试做题练习系统带商城功能证书管理课程系统

thinkphp开发的在线学习培训考试模拟考试做题练习系统带商城功能证书管理课程系统 1、做题界面 2、前端UI的展示 3、带商城购物功能

springboot 通过博途获取plc点位的数据

springboot 通过博途获取plc点位的数据 maven依赖<dependency><groupId>com.github.dathlin</groupId><artifactId>HslCommunication</artifactId><version>3.6.0</version> </dependency>这个版本尽量是新版本&#xff0c;不…

微服务-GateWay(网关)

所谓网关是什么意思&#xff1f; 相当于就是你们小区家的保安&#xff0c;进出小区都得获得保安的同意&#xff0c;守护你们小区的生命财产健康&#xff0c;网关也是如此&#xff0c;对每个请求都严格把关&#xff0c;将合法的或者是获得权限的请求进入服务器 网关的功能&…

【CTF-web】bugku-成绩查询(sql注入)

题目链接&#xff1a;https://ctf.bugku.com/challenges/detail/id/84.html 判断注入点 查看网页源码可知输入数据通过POST发送到index.php并显示出查询结果&#xff0c;可能需要sql注入。 如上图所示&#xff0c;当id为1时返回名字为“龙龙龙”的成绩单。 再测试&#xff0c…

创建第一个任务源码解析

经过上面的操作以后我们就可以启动第一个任务了&#xff0c;函数 prvStartFirstTask()用于启动第一 个任务&#xff0c;这是一个汇编函数&#xff0c;函数源码如下&#xff1a; __asm void prvStartFirstTask( void ) { PRESERVE8 ldr r0, 0xE000ED08 ;R00XE000ED08 (1) ldr r…

Go语言GIN框架安装与入门

Go语言GIN框架安装与入门 文章目录 Go语言GIN框架安装与入门1. 创建配置环境2. 配置环境3. 下载最新版本Gin4. 编写第一个接口5. 静态页面和资源文件加载6. 各种传参方式6.1 URL传参6.2 路由形式传参6.3 前端给后端传递JSON格式6.4 表单形式传参 7. 路由和路由组8. 项目代码mai…

KBEngine增加ThinkingData打点

Windows下的安装ThinkingData 首先根据他的文档&#xff0c;安装sdk和Logbus&#xff0c;他的原理是sdk写入到log文件&#xff0c;然后通过Logbus2来传送到TD&#xff08;ThinkingData&#xff09;服务器。 通过pip获取 Python SDK pip install ThinkingDataSdk pip install…

力扣75——多维动态规划

总结leetcode75中的多维动态规划算法题解题思路。 上一篇&#xff1a;力扣75——一维动态规划 力扣75——多维动态规划 1 不同路径2 最长公共子序列3 买卖股票的最佳时机含手续费4 编辑距离1 - 4 解题总结 1 不同路径 题目&#xff1a; 一个机器人位于一个 m x n 网格的左上角…

史上最全!80个数字化工厂常见术语合集,看完秒懂~

这几天&#xff0c;有几个朋友私信我&#xff0c;问了我不少问题&#xff0c;其中有一个让我讲一讲“数字化工厂”方面的知识&#xff0c;了解我的人想必都清楚&#xff0c;我这个人一般都是有求必应的。 所以今天来聊一聊“数字化工厂”的常见术语&#xff0c;帮助大家快速搞…

【Linux】模拟实现linux的shell

#include <stdio.h> #include <unistd.h> #include <string.h> #include <stdlib.h> #include <sys/wait.h> #include <sys/types.h> #define NUM 1024 #define SIZE 32 #define SEP " " int main() {//保存输入后的字符串char …

你需要需求管理解决方案的三个原因

我们最近研究了一份 Forrester Research 的报告&#xff0c;得出如下结论&#xff1a;高度监管的行业可以从敏捷需求管理方法中受益。在本文中&#xff0c;我们将深入探讨所有行业的客户如何从一个协作平台中受益&#xff0c;该平台如何帮助他们在复杂的开发周期中管理需求。 …

【傅里叶级数与傅里叶变换】数学推导——3、[Part4:傅里叶级数的复数形式] + [Part5:从傅里叶级数推导傅里叶变换] + 总结

文章内容来自DR_CAN关于傅里叶变换的视频&#xff0c;本篇文章提供了一些基础知识点&#xff0c;比如三角函数常用的导数、三角函数换算公式等。 文章全部链接&#xff1a; 基础知识点 Part1&#xff1a;三角函数系的正交性 Part2&#xff1a;T2π的周期函数的傅里叶级数展开 P…