Linux 正则表达式 扩展正则表达式 gawk

news2025/5/23 23:19:39

什么是正则表达式

        正则表达式是我们所定义的模式模板(pattern template),Linux工具用它来过滤文本。Linux工具(比如sed编辑器或gawk程序)能够在处理数据时,使用正则表达式对数据进行模式匹配。如果数据匹配模式,会被接受并进一步处理;如不匹配模式,则会被滤掉

        正则表达式是通过正则表达式引擎(regular expression engine)实现的。Linux有两种流行的正则表达式引擎:

  • POSIX基础正则表达式(basic regular expression,BRE)引擎
  • POSIX扩展正则表达式(extended regular expression,ERE)引擎

sed编辑器只符合BRE引擎规范的子集,能匹配数字、单词以及按字母排序的字符。

gawk程序用ERE引擎来处理它的正则表达式模式。

        gawk程序可以使用大多数扩展正则表达式模式符号,并且能提供一些额外过滤功能,因为如此,gawk程序在处理数据流时通常才比较慢

1、问号

表明前面的字符可以出现0次或1次,不会匹配多次出现的字符。

$ echo "bt" | gawk '/be?t/{print $0}'
bt
$ echo "bet" | gawk '/be?t/{print $0}'
bet
$ echo "beet" | gawk '/be?t/{print $0}'
$
$ echo "beeet" | gawk '/be?t/{print $0}'
$

可以将问号和字符组一起使用:

$ echo "bt" | gawk '/b[ae]?t/{print $0}'
bt
$ echo "bat" | gawk '/b[ae]?t/{print $0}'
bat
$ echo "bot" | gawk '/b[ae]?t/{print $0}'
$
$ echo "bet" | gawk '/b[ae]?t/{print $0}'
bet
$ echo "baet" | gawk '/b[ae]?t/{print $0}'
$
$ echo "beat" | gawk '/b[ae]?t/{print $0}'
$
$ echo "beet" | gawk '/b[ae?t/{print $0}'
$

如果两个字符都出现,或者其中一个字符出现了2次,模式匹配不成立。

2、加号

        加号表明前面的字符可以出现1次或多次,必须至少出现1次。如果该字符没有出现,那么模式就不会匹配。

$ echo "beeet" | gawk '/be+t/{print $0}'
beeet
$ echo "beet" | gawk '/be+t/{print $0}'
beet
$ echo "bet" | gawk '/be+t/{print $0}'
bet
$ echo "bt" | gawk '/be+t/{print $0}'
$
#字符e没有出现,模式匹配就不成立
$ echo "bt" | gawk '/b[ae]+t/{print $0}'
$
$ echo "bat" | gawk '/b[ae]+t/{print $0}'
bat
$ echo "bet" | gawk '/b[ae]+t/{print $0}'
bet
$ echo "beat" | gawk '/b[ae]+t/{print $0}'
beat
$ echo "beet" | gawk '/b[ae]+t/{print $0}'
beet
$ echo "beeat" | gawk '/b[ae]+t/{print $0}'
beeat
$
# 字符组中定义的任一字符出现,文本就会匹配指定模式。

3、花括号

        ERE中的花括号允许我们为可重复的正则表达式指定一个上限,这通常称为间隔(interval)。可以用两种格式来指定区间:

  • m:正则表达式准确出现m次
  • m, n:正则表达式至少出现m次,至多n次。

注意:默认情况下,gawk程序不会识别正则表达式间隔,必须指定gawk程序的--re- interval命令行选项才能识别正则表达式间隔。

 echo "bt" | gawk --re-interval '/be{1}t/{print $0}'
# 无输出,指定要出现一次e
echo "bet" | gawk --re-interval '/be{1}t/{print $0}'
# 输出 bet
 echo "beet" | gawk --re-interval '/be{1}t/{print $0}'
# 无输出,指定输出一个e,存在两个e
echo "bt" | gawk --re-interval '/b[ae]{1,2}t/{print $0}'
# 无输出,[ae]中的一个字母至少出现一次,最多出现两次
echo "bat" | gawk --re-interval '/b[ae]{1,2}t/{print $0}'
# 输出bat
echo "bet" | gawk --re-interval '/b[ae]{1,2}t/{print $0}'
# 输出bet
echo "beat" | gawk --re-interval '/b[ae]{1,2}t/{print $0}'
# 输出beat
echo "beet" | gawk --re-interval '/b[ae]{1,2}t/{print $0}'
# 输出beet
echo "beeat" | gawk --re-interval '/b[ae]{1,2}t/{print $0}'
# 无输出,a和e共出现三次,超出范围。

4、管道符号

        管道符号允许检查数据流时,用逻辑OR方式指定正则表达式引擎要用的两个或多个模
。如果任何一个模式匹配了数据流文本,文本就通过测试;如果没有模式匹配,则数据流文本
匹配失败。

使用管道符号的格式如下:expr1|expr2|...

echo "The cat is asleep" | gawk '/cat|dog/{print $0}'
# 输出:The cat is asleep

echo "The dog is asleep" | gawk '/cat|dog/{print $0}'
# 输出:The dog is asleep

echo "The sheep is asleep" | gawk '/cat|dog/{print $0}'
# 输出:无

# 正则表达式和管道符号之间不能有空格,否则会被认为是正则表达式模式的一部分。
echo "He has a hat." | gawk '/[ch]at|dog/{print $0}'
# 输出:He has a hat.
# 这个例子会匹配数据流文本中的cat、hat或dog。

5、表达式分组

        正则表达式模式可以用圆括号进行分组。

echo "Sat" | gawk '/Sat(urday)?/{print $0}'
# 输出:Sat
echo "Saturday" | gawk '/Sat(urday)?/{print $0}'
# 输出:Saturday
# 问号表示括号内数据出现0次或1次。
echo "cat" | gawk '/(c|b)a(b|t)/{print $0}'
# 输出:cat
echo "cab" | gawk '/(c|b)a(b|t)/{print $0}'
# 输出:cab
echo "bat" | gawk '/(c|b)a(b|t)/{print $0}'
# 输出:bat
echo "bab" | gawk '/(c|b)a(b|t)/{print $0}'
# 输出:bab
echo "tab" | gawk '/(c|b)a(b|t)/{print $0}'
# 无输出
echo "tac" | gawk '/(c|b)a(b|t)/{print $0}'
# 不匹配,无输出
# 模式(c|b)a(b|t)会匹配第一组中字母的任意组合以及第二组中字母的任意组合

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

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

相关文章

Java转Go日记(五十四):gin路由

1. 基本路由 gin 框架中采用的路由库是基于httprouter做的 地址为:https://github.com/julienschmidt/httprouter package mainimport ("net/http""github.com/gin-gonic/gin" )func main() {r : gin.Default()r.GET("/", func(c …

【解决】自己的域名任何端口都访问不到,公网地址正常访问,服务器报错500。

一、问题描述 后端项目部署在服务器上,通过域名访问接口服务器报错500,通过浏览器访问域名的任何端口都是无法访问此网站。 但是通过公网地址访问是可以正常访问到的,感觉是域名出现了问题 二、解决过程 先说结论:问题原因是…

制作 MacOS系统 の Heic动态壁纸

了解动态桌面壁纸 当macOS 10.14发布后,会发现系统带有动态桌面壁纸,设置后,我们的桌面背景将随着一天从早上、到下午、再到晚上的推移而发生微妙的变化。 虽然有些软件也有类似的动态变化效果,但是在新系统中默认的HEIC格式的动…

大数据 笔记

kafka kafka作为消息队列为什么发送和消费消息这么快? 消息分区:不受单台服务器的限制,可以不受限的处理更多的数据顺序读写:磁盘顺序读写,提升读写效率页缓存:把磁盘中的数据缓存到内存中,把…

【数据库】-1 mysql 的安装

文章目录 1、mysql数据库1.1 mysql数据库的简要介绍 2、mysql数据库的安装2.1 centos安装2.2 ubuntu安装 1、mysql数据库 1.1 mysql数据库的简要介绍 MySQL是一种开源的关系型数据库管理系统(RDBMS),由瑞典MySQL AB公司开发,目前…

物流项目第五期(运费计算实现、责任链设计模式运用)

前四期: 物流项目第一期(登录业务)-CSDN博客 物流项目第二期(用户端登录与双token三验证)-CSDN博客 物流项目第三期(统一网关、工厂模式运用)-CSDN博客 物流项目第四期(运费模板列…

X 下载器 2.1.42 | 国外媒体下载工具 网页视频嗅探下载

X 下载器让你能够轻松地从社交应用如Facebook、Instagram、TikTok等下载视频和图片。通过内置浏览器访问网站,它能自动检测视频和图片,只需点击下载按钮即可完成下载。去除广告,解锁本地会员,享受无广告打扰的下载体验。 大小&am…

STM32 CAN CANAerospace

STM32的CAN模块对接CANAerospace 刚开始报错如下. 设备开机后整个CAN消息就不发了. USB_CAN调试器报错如下. index time Name ID Type Format Len Data00000001 000.000.000 Event 总线错误 DATA STANDARD 8 接收过程错误-格…

完整改进RIME算法,基于修正多项式微分学习算子Rime-ice增长优化器,完整MATLAB代码获取

1 简介 为了有效地利用雾状冰生长的物理现象,最近开发了一种优化算法——雾状优化算法(RIME)。它模拟硬雾状和软雾状过程,构建硬雾状穿刺和软雾状搜索机制。在本研究中,引入了一种增强版本,称为修改的RIME…

服务器安装xfce桌面环境并通过浏览器操控

最近需要运行某个浏览器的脚本,但是服务器没有桌面环境,无法使用,遂找到了KasmVNC,并配合xfce实现低占用的桌面环境,可以直接使用浏览器进行操作 本文基于雨云——新一代云服务提供商的Debian11服务器操作,…

Oracle 创建外部表

找别人要一下数据,但是他发来一个 xxx.csv 文件,怎么办? 1、使用视图化工具导入 使用导入工具导入,如 DBeaver,右击要导入的表,选择导入数据。 选择对应的 csv 文件,下一步就行了(如…

大语言模型 17 - MCP Model Context Protocol 介绍对比分析 基本环境配置

MCP 基本介绍 官方地址: https://modelcontextprotocol.io/introduction “MCP 是一种开放协议,旨在标准化应用程序向大型语言模型(LLM)提供上下文的方式。可以把 MCP 想象成 AI 应用程序的 USB-C 接口。就像 USB-C 提供了一种…

【软考向】Chapter 9 数据库技术基础

基本概念数据库的三级模式结构 数据模型E-R 模型关系模型各种键完整性约束 关系代数5 种基本的关系代数运算:并、差、笛卡儿积、投影和选择扩展的关系代数运算:交(Intersection)、连接(Join)、除(Division)、广义投影(Generalized Projection)、外连接(O…

实战:Dify智能体+Java=自动化运营工具!

我们在运营某个圈子的时候,可能每天都要将这个圈子的“热门新闻”发送到朋友圈或聊天群里,但依靠传统的实现手段非常耗时耗力,我们通常要先收集热门新闻,再组装要新闻内容,再根据内容设计海报等。 那怎么才能简化并高…

STM32单片机GUI系统1 GUI基本内容

目录 一、GUI简介 1、emWin 2、LVGL (Light and Versatile Graphics Library) 3、TouchGFX 4、Qt for Embedded 5、特性对比总结 二、LVGL移植要求 三、优化LVGL运行效果方法 四、LVGL系统文件 一、GUI简介 在嵌入式系统中,emWin、LVGL、TouchGFX 和 Qt 是…

应届本科生简历制作指南

一、找一个专业的简历模板 首先,你需要访问 Overleaf 的官方网站,也就是Overleaf, Online LaTeX Editor,进入页面后,点击注册按钮,按照提示填写相关信息来创建一个属于自己的账号,通常需要填写用户名、邮箱…

PyTorch可视化工具——使用Visdom进行深度学习可视化

文章目录 前置环境Visdom安装并启动VisdomVisdom图形APIVisdom静态更新API详解通用参数说明使用示例Visdom动态更新API详解1. 使用updateappend参数2. ~~使用vis.updateTrace方法~~3. 完整训练监控示例 Visdom可视化操作散点图plot.scatter()散点图案例线性图vis.line()vis.lin…

企业级爬虫进阶开发指南

企业级爬虫进阶开发指南 一、分布式任务调度系统的深度设计 1.1 架构设计原理 图表 1.2 核心代码实现与注释 分布式锁服务 # distributed_lock.py import redis import timeclass DistributedLock:def __init__(self, redis_conn):self.redis = redis_connself.lock_key = …

网络安全-等级保护(等保) 2-7 GB/T 25058—2019 《信息安全技术 网络安全等级保护实施指南》-2019-08-30发布【现行】

################################################################################ GB/T 22239-2019 《信息安全技术 网络安全等级保护基础要求》包含安全物理环境、安全通信网络、安全区域边界、安全计算环境、安全管理中心、安全管理制度、安全管理机构、安全管理人员、安…

数据结构实验10.1:内部排序的基本运算

文章目录 一,实验目的二,实验内容1. 数据生成与初始化2. 排序算法实现(1)直接插入排序(2)二分插入排序(3)希尔排序(4)冒泡排序(5)快速…