Linux操作系统基础 – 正则表达式快速入门

Linux操作系统基础 – 正则表达式快速入门

Linux Operating System Essentials - Introduction to Regular Expressions

通常在计算机科学领域,正则表达式被解释为对字符串操作的一种逻辑公式,即用事先定义好的特定字符及其组合组成所谓的“规则字符串”,而我们用它来表达对字符串的一种过滤逻辑。

规划这种过滤逻辑的用途,是查找和匹配特定文本中的字符串,从而进行和优化内容分析,使工作提高效率。

本文将介绍正则表达式的匹配规则和应用案例,并用grep工具实现正则表达式的各种功能。

0. 正则表达式匹配字符

正则表达式模式匹配字符及配合使用的Quantifier(量词)和控制字符有其自身的作用,例如:
在这里插入图片描述
在这里插入图片描述

1. Grep与正则表达式

grep 是 Linux 中最有用并且非常强大的文本处理命令之一。grep 可以在一个或多个输入文件中搜索与正则表达式匹配的行,并将每个匹配行写入标准输出。

在本文中,我们将探讨如何在 GNU 版本的 grep 中使用正则表达式的基础知识,该版本在大多数 Linux 操作系统中默认可用。

Regular Expressions (或 正则表达式) 是与一组字符串匹配的模式。模式由运算符、构造文字字符和元字符组成,它们具有特殊含义。GNU grep
支持三种正则表达式语法:基本、扩展和 Perl 兼容

在最简单的形式中,当没有给出正则表达式类型时,grep 将搜索模式解释为基本正则表达式。若要将模式解释为扩展正则表达式,请使用 -E(或 --extended-regexp)选项。

在 GNU 的 grep 实现中,基本正则表达式语法和扩展正则表达式语法之间没有功能上的区别。唯一的区别是,在基本正则表达式中,元字符 ?、+、{、|、( 和 ) 被解释为文字字符。为了在使用基本正则表达式时保留元字符的特殊含义,必须使用反斜杠 () 对字符进行转义。我们稍后将解释这些元字符和其他元字符的含义。

通常,应始终将正则表达式括在单引号(‘ ’)中,以避免 shell 对元字符的解释和扩展。

2. 匹配字面量(Matching Literals)

grep 命令的最基本用法是在文件中搜索文字字符或一系列字符。例如,如果需要在 /etc/passwd 文件中显示包含字符串“bash”的所有行,请运行以下命令:

#  grep bash etc/passwd

执行结果如下图所示:
在这里插入图片描述

在此示例中,字符串“bash”是一个基本正则表达式,由四个文本字符组成。这个命令告诉 grep 搜索一个字符串,该字符串后面跟着**“a”、“s”和“h”。**

默认情况下,grep 命令区分大小写。这意味着大写和小写字符被视为不同的字符。

要在搜索时忽略大小写,请使用 -i 选项(或 --ignore-case)。

需要注意的是,grep 将搜索模式查找为字符串,而不是单词。因此,如果你正在搜索 “ok”,grep 也会打印 “ok” 嵌入在较大单词中的行,例如 “look” 或 “cook”。

如果搜索字符串包含空格,则需要将其括在单引号或双引号中,见如下示例:

# grep “Gnome Display Manager” /etc/passwd

3. 锚固(Anchoring)
锚点是元字符,可用于指定必须在行中找到匹配项的位置。

^(插入符号)与行首的空字符串匹配。在以下示例中,仅当字符串“linux”出现在一行的开头时,它才会匹配。我们先看一下要过滤的文本文档file.txt内容:

Looking to get started in Linux? Develop a good working knowledge of Linux using both the graphical interface and command line across the major Linux distribution families with The Linux Foundation’s Intro to Linux online course. Enroll for free here.

尝试用以下grep命令从file.txt过滤不同需求的字符串。

 grep “Linux” file.txt

执行结果如下:
在这里插入图片描述

grep '^linux' file.txt

$(美元)符号与行首的空字符串匹配。要查找以字符串“linux”结尾的行,请使用:
例如:

grep 'linux$' file.txt

您还可以使用两个锚点构造正则表达式。例如,若要查找仅包含“linux”的行,请运行:

grep '^linux$' file.txt

另一个有用的示例是匹配所有空行的 ^$ 模式。

4. 匹配单个字符

这个"."(句点)符号是与任何单个字符匹配的元字符。例如,若要匹配以“kan”开头、包含两个字符并以字符串“roo”结尾的任何内容,请使用以下模式:

grep 'kan..roo' file.txt

5. grep accept[np]t**

括号表达式
括号表达式允许通过将一组字符括在方括号 [ ] 内来匹配这些字符。例如,查找包含“accept”或“accent”的行,可以使用以下表达式:

grep 'acce[np]t' file.txt

如果括号内的第一个字符是插入符号 ^,则它与括号中未括起来的任何单个字符匹配。以下模式将匹配以“co”开头的字符串的任意组合,后跟除“l”后跟“la”以外的任何字母,例如“coca”、“cobalt”等,但与包含“cola”的行不匹配:

grep 'co[^l]a' file.txt

您可以在括号内指定一系列字符,而不是逐个放置字符。范围表达式是通过指定范围的第一个和最后一个字符来构造的,这些字符用连字符分隔。例如,[a-e] 等同于 [abcde],[1-3] 等同于 [123]。

以下表达式匹配以大写字母开头的每一行:
grep '^ 范围表达式‘ file.txt

6. Quantifier(量词)

限定符允许您指定匹配项的出现次数,这些项必须存在才能发生匹配。下表显示了 GNU grep 支持的量词:

限定符允许您指定匹配项的出现次数,这些项必须存在才能发生匹配。下表显示了 GNU grep 支持的量词:

Quantifier Description
(*) 将前一项匹配零次或多次。(不含括号)
? 将前一项匹配零次或一次。
(+) 匹配前一项一次或多次。(不含括号)
{n} 将前一项精确匹配n次。
{n,} 匹配前一项至少n次。。
{,m} 最多匹配前一项 m 次。
{n,m} 从 n 次到 m 次匹配前项。

*(星号)字符与前一项匹配零次或多次。例如,以下命令将匹配“right”、“sright”、“ssright”等:

grep 's*right'

下面是更高级的模式,它匹配所有以大写字母开头并以句点或逗号结尾的行。.* 正则表达式匹配任意数量的任意字符:

grep -E '^[A-Z].*[.,]$' file.txt

(问号)字符使前一项可选,并且只能匹配一次。以下内容将同时匹配“明亮”和“正确”。这?字符使用反斜杠转义,因为我们使用的是基本的正则表达式:

grep 'b?right' file.txt

以下是使用扩展正则表达式的相同正则表达式:

grep -E 'b?right' file.txt

+(加号)字符与前一项匹配一次或多次。以下内容将匹配“sright”和“ssright”,但不匹配“right”:

grep -E 's+right' file.txt

大括号字符 {} 允许您指定匹配发生所必须发生的确切数字、上限或下限或出现次数范围。

以下命令将匹配 3 到 9 位之间的所有整数:

grep -E '[[:d igit:]]{3,9}' file.txt

7.交替

1.术语交替是一个简单的“OR”。交替运算符 |(pipe) 允许您指定不同的可能匹配项,这些匹配项可以是文本字符串或表达式集。此运算符在所有正则表达式运算符中具有最低的优先级。

在下面的示例中,

如果使用扩展正则表达式,则运算符 |不应转义,如下所示:

grep -E 'fatal|| error| critical' /var/log/nginx/error.log

8.分组

分组是正则表达式的一项功能,允许您将模式组合在一起并将它们作为一个项目引用。使用括号() 创建组。
使用基本正则表达式时,括号必须使用反斜杠 () 进行转义。

以下示例同时匹配“fearless”和“less”。这个?量词使 (fear) 组可选:

grep -E '(fear)?less' file.txt

9. 特殊反斜杠表达式

GNU grep 包含几个元字符,由一个反斜杠和一个常规字符组成。下表显示了一些最常见的特殊反斜杠表达式:

附:表达式说明

b 匹配单词边界。
< 匹配单词开头的空字符串。 > 匹配单词末尾的空字符串。 w 匹配一个单词。 s 匹配空格。

此模式将匹配单独的单词“abject”和“object”。如果嵌入到较大的单词中,它将与单词不匹配:

grep 'b[ao]bjectb' file.txt

10. 小结

正则表达式用于文本编辑器、编程语言和命令行工具,例如 grep、sed 和 awk 。了解如何构造正则表达式在搜索文本文件、同时在编写脚本或过滤命令输出时非常有用。(参考资料:Linuxize.com)

技术好文陆续推出,敬请关注。

喜欢就点赞哈。😊

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

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

相关文章

深度学习之基于YoloV5血红细胞检测识别系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 深度学习已经在许多领域中得到了广泛的应用&#xff0c;包括医疗健康领域。其中&#xff0c;YOLO&#xff08;You O…

UE基础篇四:地形基础概念

导语: 视频文档在文末 一、从引擎中导入高度图 高度图是灰度图,并且每个像素有16位的深度,支持这种格式的是.png 和.raw格式 高度图可以自己绘制,或者通过许多网站下载那些复制现实世界地点的图片,许多网站也有免费资源下载 二、草地和石头混合图层 创建一个混合材质,…

龙迅LT8912B 单通道MIPIDSI桥接LVDS+HDMI(1.4)同显点屏LVDS,加环出一路HDMI

龙迅LT8912B 描述: Lontium LT8912B MIPIDSI到LVDS和HDMI桥采用单通道MIPID-PHY接收器前端配置&#xff0c;每个通道有4个数据通道&#xff0c;每个数据通道运行1.5Gbps&#xff0c;最大输入带宽可达6Gbps。对于屏幕应用&#xff0c;该桥解码MIPIDSI 18bpp RGB666和24bpp RGB…

系列四、JVM的内存结构【本地接口(Native Interface)】

一、组成 本地接口由本地方法栈&#xff08;Native Method Stack&#xff09;、本地方法接口&#xff08;Native Interface&#xff09;、本地方法库组成。 二、本地接口的作用 本地接口的作用是融合不同的编程语言为Java所用&#xff0c;它的初衷是融合C/C程序&#xff0c;Jav…

【ARM Trace32(劳特巴赫) 使用介绍 5 -- Trace32 scan dump 详细介绍】

文章目录 1.1 JTAG 测试逻辑架构1.2 D型扫描触发器1.2.1 全扫描介绍1.3 IR 寄存器1.4 TDR(Test data registers)1.4.1 TDR 的实现1.4.1.1 Bypass Register1.4.1.2 Boundary-scan register1.5 Scan Dump1.5.1 soft fusion1.1 JTAG 测试逻辑架构 图 1-1 片上测试逻辑概念图 如前面…

YOLOv8-Seg改进:检测头全新创新篇 | S_improve_Segment结构创新

🚀🚀🚀本文改进:S_improve_Segment全新的分割结构头创新,适配各个YOLO 🚀🚀🚀 S_improve_Segment在各个场景都能够有效涨点 🚀🚀🚀YOLOv8-seg创新专栏:http://t.csdnimg.cn/KLSdv 学姐带你学习YOLOv8,从入门到创新,轻轻松松搞定科研; 1)手把手教你…

数据结构 链表

单链表&#xff1a;单链表用来写邻接表&#xff0c;邻接表用来存储图和树 双链表&#xff1a;用来优化某些问题 单链表 链式存储 #include<stdio.h> #include<stdlib.h> int cont 0; //结构体 typedef struct List { int data; //数据域 struct List* next; //…

Freeswitch中CHANNEL_HANGUP外呼挂断事件

1.CHANNEL_HANGUP外呼挂断事件 事件详细 ################## 外呼挂断&#xff1a;############################# [EslMessage{contentTypecommand/reply, headers3, body0 lines}] 2023-11-16T03:41:33.5140800 INFO c.e.c.v.s.c.i.FsServerEventHandler - eventReceived:…

vue2 mixin的方式 大屏适配(缩放居中的方式)

使用要求&#xff1a;指定容器的 id 为 bigScreenContainer 一、效果图 不管你的屏幕多大都会根据设计稿 1920*1080 进行缩放 图一&#xff1a;缩小的效果 图二&#xff1a;放大的效果 二、使用方式 <template><div id"bigScreenContainer" ref"big…

【Proteus仿真】【Arduino单片机】HC05蓝牙通信

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器&#xff0c;使用PCF8574、LCD1602液晶、HC05蓝牙传感器等。 主要功能&#xff1a; 系统运行后&#xff0c;LCD1602显示蓝牙接收数据。 二、软件设计 /* 作者…

axios升级依赖版本后报错SyntaxError: Cannot use import statement outside a module

Axios构建为ES模块&#xff0c;而不是在Node中运行时的CommonJs。Jest的问题是它在Node中运行代码。这就是为什么告诉Jest转换Axios有效的原因。 Axios SDK附带了一个用于Node env的内置CommonJs文件。因此&#xff0c;我们可以通过将以下内容添加到您的package.json来修复它&a…

微服务架构之路7,Nacos配置中心的Pull原理,附源码

目录 一、本地配置二、配置中心1、以Nacos为例&#xff1a;2、Pull模式3、也可以通过Nacos实现注册中心 三、配置中心提供了哪些功能四、如何操作配置中心1、配置注册2、配置反注册3、配置查看4、配置变更订阅 五、主流的微服务注册中心有哪些&#xff0c;如何选择&#xff1f;…

C# 图解教程 第5版 —— 第15章 事件

文章目录 15.1 发布者和订阅者15.2 源代码组件概览15.3 声明事件15.4 订阅事件15.5 触发事件15.6 标准事件的用法15.6.1 通过扩展 EventArgs 来传递数据15.6.2 移除事件处理程序 15.7 事件访问器 15.1 发布者和订阅者 ​ 发布者 / 订阅者模式&#xff1a;发布者定义了一系列事…

Transformer

1. 整体架构 2. Encoder 1&#xff09;输入部分&#xff1a;Embeding 位置编码 位置编码没搞懂

小程序转换工具—Antmove 使用教学

自从微信小程序问世以后&#xff0c;字节、阿里、百度巨头们都各自搞各自的小程序平台&#xff0c;各有各的技术标准。基础技术都大差不差&#xff0c;但就是没法统一。搞得我们这些对接各平台的程序猿们苦不堪言。 虽说uniapp、Taro、Mpvue、Weex、Flutter都支持跨平台小程序…

LeetCode | 232. 用栈实现队列

​ LeetCode | 232. 用栈实现队列 OJ链接 解题思路&#xff1a; 此题可以用两个栈实现&#xff0c;一个栈进行入队操作&#xff0c;另一个栈进行出队操作出队操作&#xff1a; 当出队的栈不为空是&#xff0c;直接进行出栈操作&#xff0c;如果为空&#xff0c;需要把入队的…

HarmonyOS 实战项目

引言 本章将介绍如何在 HarmonyOS 上进行实际项目开发。我们将从项目需求分析开始&#xff0c;逐步完成项目的设计、开发、测试和上线过程。 目录 项目需求分析项目设计项目开发项目测试项目上线总结 1. 项目需求分析 项目需求分析是项目开发的关键阶段之一&#xff0c;它…

C#,数值计算——插值和外推,Base_interp的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// Abstract base class used by all interpolation routines in this chapter. /// Only the routine interp is called directly by the user. /// </summary> pu…

Digicert证书:您的网络安全守护神

在当今数字化的世界中&#xff0c;网络安全已经成为每一个企业和个人必须面对的问题。而Digicert品牌证书&#xff0c;就是您网络安全的最佳选择。它不仅具有强大的安全性和稳定性&#xff0c;还能广泛应用于各种场景&#xff0c;为您提供全方位的保护。 首先&#xff0c;我们要…

Paypal发布公开信,三月已过,PYUSD发展如何?

2023年8月8日&#xff0c;美国支付巨头Paypal正式宣布推出其稳定币PYUSD&#xff0c;成为美国传统大型金融机构发行稳定币的首家企业。 当时&#xff0c;正值美国SEC与加密交易所Coinbase、Binance的诉讼白热化&#xff0c;Paxos被迫停止发行BUSD的阶段&#xff0c;在此背景下&…