Shell脚本之正则表达式详解

news2025/1/24 0:50:12

目录

一、正则表达式简介

二、正则表达式的组成

三、正则表达式分类

四、正则表达式字符用法

1.基础正则表达式常见元字符(支持grep、egrep、sed、awk)

2. 扩展正则表达式元字符(支持:egrep、grep -E、awk、sed -r)

五、正则表达式练习

1.匹配/etc/fstab中不是以#开头的行

2.匹配/etc/passwd中以bash结尾的行

3.匹配文件中025开头,后一个字符为"-" " "或没有,之后为5或8开头的数字,总位数为11位

六、常用正则表达式


一、正则表达式简介

在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里,正则表达式通常被用来检索或替换那些符合某个模式的文本内容。许多程序设计语言都支持利用正则表达式进行字符串操作。

只有掌握了正则表达式,才能全面地掌握 Linux 下的常用文本工具(例如:grep、egrep、sed、awk 等) 的用法。

二、正则表达式的组成

正则表达式由普通字符元字符组成。

  • 普通字符包括大小写字母、数字、标点符号及一些其他符号。

  • 元字符是指在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符或表达式,可以使用()括起来指定)在目标对象中的出现模式。

三、正则表达式分类

  1. 基本的正则表达式(Basic Regular Expression 又叫 Basic RegEx 简称 BREs)

  2. 扩展的正则表达式(Extended Regular Expression 又叫 Extended RegEx 简称 EREs)

  3. Perl 的正则表达式(Perl Regular Expression 又叫 Perl RegEx 简称 PREs)

四、正则表达式字符用法

1.基础正则表达式常见元字符(支持grep、egrep、sed、awk)

字符用法
\转义字符,用于取消特殊符号的含义,例:!、\n、$等表示这些符号本身
^匹配字符串开始的位置,例:^a、^the、^#、^[a-z] 等表示以...开头
$匹配字符串结束的位置,例:word$表示以...结尾^$匹配空行
.匹配除\n之外的任意的一个字符,例:go.d表示匹配.处的一个字符
*匹配前导字符或表达式0次或者多次,例:good、go.d表示匹配前一个字符0次或多次
[list]匹配list列表中的一个字符,例: go[ola]d,[abc]表示其中一个字符 [a-z]表示所有小写字母、[a-zA-Z]表示所有大小写字母、[0-9]表示数字
[^list]匹配任意list列表中的一个字符,相当于上一条匹配的结果取反
{n}匹配前导字符或表达式n次,例:go{2}d、' [0-9]{2 }'匹配两位数字
{n,m}匹配前导字符或表达式n到m次m不写表示不少于n次,例:[0-9] {2,3}表示两到三位数,[0-9]{2,}表示两位及以上数
\w \W匹配包括下划线的任何单词字符 匹配任何非单词字符,。等价于"A-Za-z0-9_"
\d \D匹配一个数字字符 匹配一个非数字字符,等价于0-9
\s \S空白符 非空白符

注意:

  • 正则表达式在表示时,需要加单引号' '或双引号" "。

  • grep 和 sed 在使用大括号 {} 表示正则表达式时,需要加转义字符 \ 表示大括号 {} 。

2. 扩展正则表达式元字符(支持:egrep、grep -E、awk、sed -r)

字符用法
+匹配前导字符或表达式1次以上,例:go+d,将匹配至少一个o
匹配前导字符或表达式0次或者1次,例:go?d,将匹配gd或god
()将括号中的字符串作为一个整体,例1:g(oo)+d,将匹配oo整体1次以上
|以或的方式匹配字符串,例:g(oo|la)d,将匹配good或者glad

五、正则表达式练习

1.匹配/etc/fstab中不是以#开头的行

//^代表以...开头,[^#]代表匹配非#
[root@localhost1 ~]#grep "^[^#]" /etc/fstab
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=552d20a1-63f1-4209-af23-7bcdb31d1c84 /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0

2.匹配/etc/passwd中以bash结尾的行

​
[root@localhost1 ~]#grep "bash$" /etc/passwd
root:x:0:0:root:/root:/bin/bash
zhangsan:x:1001:1001::/home/zhangsan:/bin/bash
lisi:x:1002:1002::/home/lisi:/bin/bash
zhaoliu:x:1003:1003::/home/zhaoliu:/bin/bash
wangwu:x:1004:1004::/home/wangwu:/bin/bash


​

3.匹配文件中025开头,后一个字符为"-"、" " 或没有,之后为5或8开头的数字,总位数为11位

[root@localhost1 ~]#cat number.txt
02583188500
025 83242add
032-asdw223s
025-83223
032023asdwe342d
025-58347282
025-53556635342
023-82342353
025 88888888
​
//025开头 ——> ^025
//后一个字符为"-"、" " 或没有(即匹配"-"或" " 0次或一次) ——> [- ]?
//因为使用了?,需要给grep 加 -E 选项
//之后为5或8 ——> [58]
//总位数为11位数字,前面已经有4个,之后匹配7个任意数字 ——> [0-9]{7}$
[root@localhost1 ~]#grep -E "^025[- ]?[58][0-9]{7}$" number.txt
02583188500
025-58347282
025 88888888

六、常用正则表达式

img

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

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

相关文章

C语言之数据在内存中的存储(2)

本章重点:浮点数在内存中的存储 浮点数:数学中的小数 eg.123.45 12.345*10^1 1.2345*10^2 1E10:1.0*10^10 整型家族的类型,表示范围:limits.h 浮点数:float.h 大家可以猜测一下打印的这四个数字…

Unity中动画系统的性能优化

降低骨骼数,减少面片数。 方法: 1.勾选Optimize Game Objects,以剔除骨骼节点对应的Transform节点 2.开启多线程渲染选项 主要影响的函数调用开销,可以在profiler中查看: Animators.Update MeshSkinning.Update C…

【TCP/IP】多进程服务器的实现(进阶) - 信号处理及signal、sigaction函数

目录 信号 signal函数 sigaction函数 尝试用信号来处理僵尸进程 我们在之前学习了如何处理“僵尸进程”,但也会有疑问:调用wait和waitpid函数时我们关注的始终是在子进程上,那么父进程上的管控(对于子进程)该如何实…

STM32——05-按键、时钟控制、中断复位 点亮LED灯

如何点亮一颗LED灯 编程实现点灯 常用的 GPIO HAL 库函数: void HAL_GPIO_Init ( GPIO_TypeDef * GPIOx , GPIO_InitTypeDef * GPIO_Init ); void HAL_GPIO_WritePin ( GPIO_TypeDef * GPIOx , uint16_t GPIO_Pin , GPIO_PinState PinState ); void HAL_GPIO_Togg…

chatgpt赋能python:Python如何创建新项目

Python如何创建新项目 Python已经成为了全球最受欢迎的编程语言之一。如果您是一个有经验的Python工程师,您可能已经知道如何在命令行上创建新项目。但是,如果您是一个新手或初学者,您可能需要一些指导来开始创建新的项目。在本篇文章中&…

Vue中如何进行样式绑定?

Vue中如何进行样式绑定? 在Vue中,我们可以很方便地进行样式绑定。样式绑定是将CSS样式与Vue组件中的数据进行关联的一种技术。通过样式绑定,我们可以根据组件的状态动态地修改其外观。本文将介绍Vue中的样式绑定,包括类绑定、内联…

chatgpt赋能python:Python如何进行升序排列?

Python如何进行升序排列? Python是一门广泛应用于Web开发、数据科学、人工智能、机器学习等领域的编程语言。在这个快速发展的世界中,如何高效地排序数据是非常重要的。本文将介绍Python中如何进行升序排序。 基本排序方法 Python提供了一个内置函数s…

Vue 中的列表渲染

Vue 中的列表渲染 在 Vue 中,列表渲染是非常常见的操作。它允许我们将一个数组中的数据渲染为一个列表,从而实现数据的展示和交互。在本文中,我们将探讨 Vue 中的列表渲染的基本原理和用法,并给出一些实例代码来帮助读者更好地理…

【模块三:职业成长】38|能力维度三:如何提升解决跨领域冲突的能力?

你好,我是郭东白。今天我们来讨论架构师核心能力的第三个层次——解决跨领域冲突。 上节课我们讲了从程序员到兼职架构师的跨越,也就是如何搭建解决横向问题的能力。 不过,在兼职架构师这个角色中,架构能力是一个加分项&#xff…

chatgpt赋能python:如何使用Python升序排列一个列表?

如何使用Python升序排列一个列表? 在Python编程中,我们经常需要对列表进行排序。列表排序是一种常见的操作,可以帮助我们对数据进行分析和管理。在这篇文章中,我们将学习如何使用Python对一个列表进行升序排列。 什么是升序排列…

时间同步/集群时间同步/在线/离线

目录 一、能够连接外网 二、集群不能连接外网--同步其它服务器时间 一、能够连接外网 1.介绍ntp时间协议 NTP(Network Time Protocol)网络时间协议,是用来使计算机时间同步的一种协议,它可以使计算机对其服务器或时钟源做同步…

【python】【Word】用正则表达式匹配正文中的标题(未使用样式)并通过win32com指定相应样式

标题的格式 二级标题: 数字.数字. 文字 三级标题:数字.数字.数字 文字 python代码 使用方法 只保留一个需要应用的WORD文档运行程序,逐行匹配 使用效果 代码 import win32com.client import redef compile_change_Word_titlestyle():#…

shell脚本语句控制命令(exit、break、continue)

一、exit exit用于直接退出shell脚本程序并返回状态码(状态码可在执行命令执行后用$?查看) 如果不在exit后添加状态码,会默认返回最后一条命令执行后的状态码 exit 加状态码,代表退出程序并向系统指定状态码 状态码…

基于zinx的go tcp通信案例

基于zinx的go tcp通信示例 一、zinx简介:(https://gitee.com/Aceld/zinx/) Zinx是一个基于Golang的轻量级tcp服务框架,根据官方的定位,zinx是在游戏领域或者其他长链接的领域的轻量级企业框架,其使用简单,性能高效,能…

Baumer工业相机堡盟工业相机如何使用BGAPISDK的相机图像时间戳计算运行时间以及时间差(C#)

Baumer工业相机堡盟工业相机如何使用BGAPISDK的相机图像时间戳计算运行时间以及时间差(C#) Baumer工业相机Baumer工业相机BGAPI SDK和图像时间戳的技术背景Baumer工业相机使用BGAPISDK控制相机数据流的方式1.引用合适的类文件2.使用BGAPISDK获取时间戳的…

Vue中如何进行条件渲染

Vue中如何进行条件渲染 Vue是一款流行的前端框架,它提供了许多方便的功能来处理数据和视图。其中一个非常有用的功能是条件渲染。条件渲染可以根据条件来控制视图的显示和隐藏。在本文中,我们将介绍Vue中如何进行条件渲染,并提供一些示例代码…

异常数据检测 | Python实现k-means时间序列异常数据检测

文章目录 文章概述模型描述源码分享学习小结文章概述 异常数据检测 | Python实现k-means时间序列异常数据检测 模型描述 k-means是一种广泛使用的聚类算法。它创建了k个具有相似特性的数据组。不属于这些组的数据实例可能会被标记为异常。在我们开始k-means聚类之前,我们使用e…

spring.expression 随笔0 概述

0. 我只是个普通码农,不值得挽留 Spring SpEL表达式的使用 常见的应用场景:分布式锁的切面借助SpEL来构建key 比较另类的的应用场景:动态校验 个人感觉可以用作控制程序的走向,除此之外,spring的一些模块的自动配置类,也会在Cond…

chatgpt赋能python:Python如何判断输入数据类型

Python如何判断输入数据类型 Python是一种动态类型语言,它可以在运行时自动识别数据的类型。但是,有时候我们需要在代码中判断输入数据的类型,以便进行相应的操作。 判断数据类型的内置函数 Python有一些内置函数可以用于判断数据类型&…

仿滴滴打车百度地图定位查找附近出租车或门店信息

前端vue仿滴滴打车百度地图定位查找附近出租车或门店信息, 下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id12982 效果图如下: # #### 使用方法 使用方法 #安装vue-baidu-map插件 npm install vue-baidu-map --save <!-- center: 地图中…