Linux ---- Shell编程之正则表达式

一、正则表达式

​         由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能,类似于增强版的通配符功能,但与通配符不同,通配符功能是用来处理文件名,而正则表达式是处理文本内容中字符。

作用:匹配文件中的内容

本质:学习各种各样的元字符并记住这个元字符的含义

1、正则表达式概述

  • 通常用于判断语句中,用来检查某一字符串是否满足某一格式
  • 正则表达式是由普通字符与元字符组成
  • 普通字符包括大小写字母、数字、标点符号及一些其他符号
  • 元字符是指在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式

1.Linux 中常用的有两种正则表达式引擎

  • 基础正则表达式:BRE
  • 扩展正则表达式:ERE
文本处理工具基础正则表达式扩展正则表达式
vim  编辑器支持\
grep支持\
egrep支持支持
sed支持\
awk支持支持

2.正则表达式搜索:

  • 元字符:预定义好的具有特殊含义的符号,这些符号能够进行通配
  • 可读性非常的差
  • 写正则表达式不难

3.部分元字符区别对待:

扩展正则中这些元字符剋直接使用:?、+、{ 、}、| 、(和)。

基础正则中这些元字符需要加反斜线表示转义:\? 、\+ 、 \{  、\}、\| 、\( 和 \)。

grep  sed默认使用基础正则表达式

grep -E 、sed  -r 、 egrep、awk扩展正则表达式

2、基础正则表达式

基础正则表达式是常用的正则表达式部分,常用的元字符及作用如下表所示:

元字符作用
\转义字符,用于取消特殊符号的含义,如:\!,\n
^匹配字符串开始的位置,如:^world匹配以world开头的行
$

匹配字符串结束的位置,如:world$匹配以world结尾的行

.匹配除\n(换行)之外的任意的1个字符
*匹配前面子表达式0次或着多次
[list]匹配list列表中的一个字符,如:[0-9]匹配任意一位数字
[^list]匹配任意不在list列表中的1个字符,如:[0-9]匹配任意一位非数字字符
\ {n\}匹配前面的子表达式n次,如:[0-9]{2\}匹配两位数字
\ {n.\}匹配前面的子表达式不少于n次,如:[0-9]\{2,\}表示两位及两位以上数字
\{n,m\}匹配前面的子表达式n到m次,如:[a-z]\{2,3\}匹配两到三位的小写字母

注意 egrep, awk使用{n}、{n,}、{n,m}匹配时“{}"前不用加“\”

 基本的正则元字符

下面哪些会显示高亮

   egrep -E -n 'wo{2}d' test.txt   -E用于显示文件中符合条件的字符egrep -E -n 'wo{2,3}d' test.txt

3、扩展正则表达式

  • 扩展正则表达式是对基础正则表达式的扩充和深化
  • 支持的工具有 egerp 和 awk
  • 扩展正则表达式元字符
元字符作用
+匹配前面子表达式1次以上,如:go+d,将匹配至少一个o
匹配前面子表达式0次或着1次,如:go?d,将匹配gd或god
()将括号中的字符串作为一个整体,如g(oo)+d,将匹配整体1次以上,如good,goooood等
|以或的方式匹配字条串,如:good | great,将匹配good或着great

1.定位符

  • ^ 匹配输入字符串开始的位置
  • $匹配输入字符串结尾的位置

2.非打印字符

  • \n匹配一个换行符
  • \r匹配一个回车符
  • \t匹配一个制表符

二、grep命令

grep命令使用正则表达式来搜索文本,并且把匹配的文本打印出来

格式:

grep [options] pattern [file]option表示选项,pattern表示匹配的模式。file表示一系列文件名。

常用的选项:

-c  只打印匹配的文本行的次数,不显示文本内容。-i   匹配时忽略字母大小写-h  当搜索多个文件,不显示匹配文件名前缀。-l   只列出含义匹配的文本行的文件的文件名,不显示其具体匹配的内容。-n  列出所有匹配的文本行,并显示行号-s   不显示关于不存在或无法读取文件的错误信息-v   只显示不匹配的文本行,反向选择,显示与搜索字符串不相符的行。-w  匹配整个单词-x   匹配整个文本行-r   递归搜索,不仅搜索当前目录,还有各级子目录-E   开启扩展(extend)的正则表达式--color=auto 可以将找到的关键词部分加上颜色的显示

1、统计包含某个字符的文本行的行数

-c 只打印匹配的文本行的次数,不显示文本内容。

2、不区分大小写查找the所有的行

-i 匹配时忽略字母大小写

3、将非空行写入到文件中

4、过滤ip地址

三、元字符操作案例

1、查找特定字符

查找出passwd文件中the的位置,其中“-n”表示显示行号、“-i”表示不区分大小写。命令执行后,符合匹配标准的字符, 字体颜色会变颜色。

2、查找特定集合字符

1. 查找既有i又有o的特殊字符

想要查找“shirt”与“short”这两个字符串时,可以发现这两个字符串均包含“sh”与“rt”。此时执行以下命令即可同时查找到“shirt”与“short”这两个字符串,其中“[]”中无论有几个字符, 都仅代表一个字符,也就是说“[io]”表示匹配“i”或者“o”。

2. 查找单个重复字符

查找重复字符,例如“oo”时,会显示两个o及两个o以上的行

3. 查找oo前面不是R开头的行

从后往前看,例如当出现Rooot时,会显示这行,因为从后往前看oo前面还是o,符合条件

4. 查找oo前面不是大小写字母开头的行

5. 查找包含数字的行

6. 查找除大小写字母开头的行

7.查找以.结尾的行

8.查找以w开头,以d结尾的行

4、查找连续字符范围 "{}"

使用“{}”字符时,需要利用转义字符“\”,将“{}”字符转换成普通字符。

 1.查询2个o的字符

2.查询两个字母之间包含多个字符串的行

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

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

相关文章

Boost.Test-如何将测试套件(源码文件)组织成工程、并执行测试

Boost.Test资源及示例的续篇 1.测试套件TestSuite的源码文件组织如下图 2.CMakeLists.txt需要自己编写,本例内容如下 cmake_minimum_required(VERSION 3.5.0 FATAL_ERROR) project(mytestmodule) enable_testing()# indicates the location of the boost instal…

OAK深度相机主机时钟同步提升10倍!

编辑:OAK中国 首发:oakchina.cn 喜欢的话,请多多👍⭐️✍ 内容可能会不定期更新,官网内容都是最新的,请查看首发地址链接。 ▌前言 Hello,大家好,这里是OAK中国,我是Ash…

近期作业总结(函数,递归,二进制)

二分查找函数 写一个二分查找函数 功能&#xff1a;在一个升序数组中查找指定的数值&#xff0c;找到了就返回下标&#xff0c;找不到就返回-1。 int bin_search(int arr[], int left, int right, int key) {int mid 0;while (left < right) {mid (right left) / 2;if…

【pytest系列】- assert断言的使用

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

【AI视野·今日Robot 机器人论文速览 第七十六期】Fri, 12 Jan 2024

AI视野今日CS.Robotics 机器人学论文速览 Fri, 12 Jan 2024 Totally 12 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Robotics Papers Topology-Driven Parallel Trajectory Optimization in Dynamic Environments Authors Oscar de Groot, Laura Ferranti, Dari…

WPOpenSocial实现WordPress的QQ登录

个人建站不可避免的需要自己搭建用户数据库的问题&#xff0c;可用户却往往因为注册繁琐而放弃浏览您的网站&#xff0c;由此可见&#xff0c;一个社交账号一键登录方式尤为重要。选择适合您网站需求的社交插件&#xff0c;可以提升用户互动&#xff0c;增加社交分享&#xff0…

《Linux C编程实战》笔记:管道

从这节开始涉及进程间的通信&#xff0c;本节是管道。 管道是一种两个进程间进行单向通信的机制。因为管道传递数据的单向性&#xff0c;管道又称之为半双工管道。。管道的这一特点决定了其使用的局限性。 数据只能由一个进程流向另一个进程&#xff1b;如果要进行全双工通信…

计算机组成原理学习| Day1

学习目标&#xff1a; 博主介绍: 27dCnc 专题 : 计算机组成原理 &#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d; ☆*: .&#xff61;. o(≧▽≦)o .&#x…

分享4款不能错过的修改照片尺寸的软件!

在当今这个数字化时代&#xff0c;照片已经成为我们分享生活、表达观点的重要方式。但是&#xff0c;你是否曾遇到过这样的问题&#xff1a;一张精美的照片因为尺寸不合适而无法在朋友圈中展现出最佳效果&#xff1f;不用担心&#xff0c;今天我们就来聊聊那些可以帮助你轻松修…

获取鼠标点击图片时候的坐标,以及利用html 中的useMap 和area 实现图片固定位置的点击事件

一 编写原因 应项目要求&#xff0c;需要对图片的固定几个位置分别做一个点击事件&#xff0c;响应不同的操作&#xff0c;如下图&#xff0c;需要点击红色区域&#xff0c;弹出不同的提示框&#xff1a; 二 获取点击图片时候的坐标 1. 说明 实现这以上功能的前提是需要确定需…

JVM-类的生命周期

类的生命周期概述 类的生命周期描述了一个类加载、使用、卸载的整个过程。整体可以分为&#xff1a; 加载 连接&#xff0c;其中又分为验证、准备、解析三个子阶段 初始化 使用 卸载 加载阶段 加载(Loading)阶段第一步是类加载器根据类的全限定名通过不同的渠道以二进制流的方…

STM32——中断系统和外部中断EXTI

一、中断 1.1中断系统 中断系统是管理和执行中断的逻辑结构&#xff1b; 1.2中断 系统在执行主程序过程中&#xff0c;出现了特定的触发条件&#xff08;触发源&#xff09;&#xff0c;系统停止执行当前程序&#xff0c;转而去执行中断程序&#xff0c;执行完毕后&#xf…

HCIA学习作业五

拓扑图&#xff1a; PC端 PC1>ipconfig PC2>ipconfig PC3>ipconfig PC4>ipconfig PC>ping PC1>ping 192.168.1.125 PC1>ping 192.168.1.254 PC1>ping 192.168.1.253 PC2>ping 192.168.1.125 PC2>ping 192.168.1.253 PC3>ping 192.168.1.126…

java程序员怎么完善自己各个方面的能力?

java程序员怎么完善自己各个方面的能力? 在开始前我分享下我的经历&#xff0c;刚入行时遇到一个好公司和师父&#xff0c;给了我机会&#xff0c;两年时间从3k薪资涨到18k的&#xff0c; 我师父给了一些java学习方法和资料&#xff0c;让我不断提升自己&#xff0c;感谢帮助…

vue 使用 v-viewer 用于图片浏览的Vue组件,支持旋转、缩放、翻转等操作,基于viewer.js。

作者连接 npm&#xff1a; npm install v-viewerlegacy viewerjs main.js 引入&#xff1a; // 引入Viewer插件 import VueViewer, { directive as viewerDirective } from v-viewer; // 引入Viewer插件的图片预览器的样式 import viewerjs/dist/viewer.css; // 使用Viewer图片…

【C++】类与对象(二)特殊成员函数

前言 类与对象&#xff08;二&#xff09; 文章目录 一、特殊成员函数二、构造函数三、析构函数四、拷贝构造函数五、拷贝赋值运算符 一、特殊成员函数 如果在类的声明中未显式提供某个成员函数的定义&#xff0c;编译器会自动生成一个默认实现。 这包括默认构造函数、默认析构…

Android studio打包apk比较大

1.遇到的问题 在集成linphone打包时发现有118m&#xff0c;为什么如此之大额。用studio打开后发现都是c不同的pu架构。 2.解决办法 增加ndk配置&#xff0c;不选配置那么多的cpu结构&#xff0c;根据自己需要调整。 defaultConfig { applicationId "com.matt.linphoneca…

备战蓝桥杯---数据结构与STL应用(基础3)

今天我们主要介绍的是pair,string,set,map pair:我们可以把它当作一个结构体&#xff1a; void solve(){pair<int int> a;//创建amake_pair(1,2);//添加元素cout<<a.first<<endl<<a.second<<endl;}//输出 当然&#xff0c;它也可以嵌套&#…

python笔记10

1、继承 继承是面向对象编程中的一个重要概念&#xff0c;它允许一个类&#xff08;子类&#xff09;继承另一个类&#xff08;父类&#xff09;的属性和方法。通过继承&#xff0c;子类可以重用父类的代码&#xff0c;并且有机会添加新的属性和方法&#xff0c;或者重写父类的…

使用PowerBI 基于Adventure Works案例分析

Adventure Works案例分析 前言 数据时代来临&#xff0c;但一个人要顺应时代的发展是真理。 数据分析的核心要素 那数分到底是什么&#xff1f; 显然DT 并不等同于 IT&#xff0c;我们需要的不仅仅是更快的服务器、更多的数据、更好用的工具。这些都是重要的组成部分&…