【Shell】正则表达式的操作实例

news2024/11/24 4:22:49

正则表达式是一个描述一组字符串的模式
是由普通字符和元字符组成的字符集,而这个字符集匹配(或指定)一个模式。

正则表达式的操作实例

  • (一)概述
    • 1.定义
    • 2.作用
    • 3.类型
  • (二)字符串匹配实例
  • (三)文本搜索实例

(一)概述

1.定义

  • 正则表达式是一个描述一组字符串的模式
    是由普通字符和元字符组成的字符集,而这个字符集匹配(或指定)一个模式。

2.作用

  • 正则表达式的主要作用是文本搜索字符串处理。一个正则表达式匹配单个字符或一个字符串,或字符串的一部分。

3.类型

  • 基本正则表达式
元字符使用语法
星号*匹配它前面的字符串或正则表达式任意次
句点.匹配除换行符外的任意一个字符
插入字符^匹配一行的开始
美元符$匹配一行的末尾
方括号[]匹配方括号内指定的字符集中的一个字符
反斜线符号\转义一个特殊字符
转义尖括号 \ <\ >用于标记单词边界,尖括号必须转义
  • 扩展正则表达式
元字符使用语法
问号?匹配0个或1个前面的字符
加号+匹配1个或多个前面的字符
转义波形括号{}匹配前面正则表达式的次数
圆括号()包含一组正则表达式
竖线“或”操作符
  • POSIX字符类

在这里插入图片描述
注意:POSIX字符类通常需要引用或双方括号([[]])括起来。

(二)字符串匹配实例

实例1

  • 测试digit的值是否为一个十进制数
#!/bin/bash
#######################################################
#
#       FILE:checknumeric.sh
#       USAGE: ./checknumeric.sh
#
#   DESCRTPTION:
#       OPTIONS: --
#       REPUIREMENTS: --
#       BUGS: --
#       NOTES: --
#       AUTHOR: LEY
#   ORGANIZATION:
#       CREATED: 05/8/2024 16:23
#       REVISION: --
#####################################################

read -p "Input a number ,Please: " num
//^[0-9]+$开头到结尾都是数字重复至少一次
if [[ $num =~ ^[0-9]+$ ]]; then
        echo "It's a number"
else
        echo "It's not a number"
fi
  • 使用POSIX字符类
read -p "Input a number ,Please: " num

if [[ $num =~ [[:digit:]]+$ ]]; then
        echo "It's a number"
else
        echo "It's not a number"
fi

实例2

  • 检测是否是email地址
#!/bin/bash
#######################################################
#
#       FILE:checkemailic.sh
#       USAGE: ./checkemailic.sh
#
#   DESCRTPTION:
#       OPTIONS: --
#       REPUIREMENTS: --
#       BUGS: --
#       NOTES: --
#       AUTHOR: LEY
#   ORGANIZATION:
#       CREATED: 05/8/2024 16:35
#       REVISION: --
#####################################################
read -p "Input a number ,Please: " email
//[A-Za-z0-9._%+-$]中的一个字符重复至少一次;@加[A-Za-z0-9.-]中的一个字符重复至少一次;\.转义一个.;[A-Za-z]{2,4}$重复2到4次结束
if [[ "$email" =~ ^[A-Za-z0-9._%+-$]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$ ]]; then
        echo "This email address looks fine: $email"
else
        echo "no"
fi

在这里插入图片描述

实例3

  • 判断IP地址格式是否正确
#!/bin/bash
#######################################################
#
#       FILE:checkIPaddress.sh
#       USAGE: ./checkIPaddress.sh
#
#   DESCRTPTION:
#       OPTIONS: --
#       REPUIREMENTS: --
#       BUGS: --
#       NOTES: --
#       AUTHOR: LEY
#   ORGANIZATION:
#       CREATED: 05/8/2024 16:35
#       REVISION: --
#####################################################
if [ $# != 1 ]; then
        echo "Usage: $0 address"
        exit 1
else
        ip=$1
fi
//IP
if [[ "$ip" =~ ^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$ ]]; then
        echo "Looks like an IPv4 IP address."
elif [[ $ip =~ ^[A-Fa-f0-9:]+$ ]]; then
        echo " Cloud be an IPv6 IP address."
else
        echo 'Oops!'
fi

25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?:这部分用于匹配一个0-255之间的数字。

  • 25[0-5]:匹配250-255。
  • 2[0-4][0-9]:匹配200-249。
  • [01]?[0-9][0-9]?:
    [01]?:匹配0或1(可选),用于匹配0-199的前两位。
    [0-9]:匹配任何一位数字。
    [0-9]?:匹配任何一位数字(可选),用于匹配0-99的最后一位(当它是两位数时)。

((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}:这部分用于匹配IPv4地址的前三个数字,并确保它们后面都有一个点(.)。

  • {3}:表示前面的捕获组需要重复三次。
  • (25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?) :这部分用于匹配 I P v 4 地址的最后一个数字,并确保它是字符串的结尾(由 :这部分用于匹配IPv4地址的最后一个数字,并确保它是字符串的结尾(由 :这部分用于匹配IPv4地址的最后一个数字,并确保它是字符串的结尾(由表示)。

(三)文本搜索实例

  • 实例1:使用句点.匹配单字符
$ cat list.txt 
1122
112
11222
2211
22111
abdde
abede
bbcde
bbdde

$ grep "112." list.txt 
1122
11222
$ grep "d.e" list.txt 
abdde
bbdde
$ grep "2.." list.txt 
11222
2211
22111

  • 实例2:使用插入符号^匹配
$ grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
$ grep ^root /etc/passwd
root:x:0:0:root:/root:/bin/bash
$ grep "^Nov 1" /etc/passwd

  • 实例3:使用美元$匹配
$ grep 'bash$' /etc/passwd		//以bash结尾
root:x:0:0:root:/root:/bin/bash
ley:x:1000:1000:ley:/home/ley:/bin/bash

  • 实例4:使用星号*匹配
]# grep "kernel: *." /var/log/messages
//匹配kernel后面的冒号“:”,还有紧跟其后的0个或多个空格,最后一个句点匹配任意一个字符

在这里插入图片描述

//以i开头,以字符l结尾的行
# egrep "\<i.*l\>" /etc/passwd --color
gnome-initial-setup:x:987:982::/run/gnome-initial-setup/:/sbin/nologin

# grep "\<i.*l\>" /etc/passwd --color
gnome-initial-setup:x:987:982::/run/gnome-initial-setup/:/sbin/nologin
  • 实例5:使用方括号[ ]匹配
# grep "[a-z]\{11\}" /etc/passwd --color
//找出文件中含有11个连续小写字符的行

在这里插入图片描述

# grep [bs] /etc/passwd
//包含字符b或字母s

在这里插入图片描述

//查看系统日志文件中包含“数字+空格+times” 的行
# grep "[0-9]\+ times" /var/log/messages --color
# egrep "[0-9]\+ times" /var/log/messages --color

  • 实例6:使用问号?匹配
# cat regeExamp.txt
hi hello
hi hello how are you
hihello
# egrep "hi ?hello" regeExamp.txt 
hi hello
hi hello how are you
hihello
//或
# grep "hi \?hello" regeExamp.txt 
hi hello
hi hello how are you
hihello
  • 实例7:使用加号+匹配
# egrep "hi +hello" regeExamp.txt 
hi hello
hi hello how are you
# grep "hi \+hello" regeExamp.txt 
hi hello
hi hello how are you

在这里插入图片描述

总结

正则表达式是一个描述一组字符串的模式。
正则表达式是由普通字符和元字符组成的字符集,而这个字符集匹配(或指定)一个模式。
正则表达式的主要作用是文本搜索和字符串处理。一个正则表达式匹配单个字符或一个字符串,或字符串的一部分。
正则表达式有两种类型,分别是基本正则表达式和扩展正则表达式。基本正则表达式的元字符有:*、.、^、$、[]、\和<>。
扩展正则表达式在基本正则表达式的元字符的基础上,增加以下元字符:?、+、{}、(和|。
POSIX字符类通常需用引号或双方括号([[])括起来。
从Bash的3.0版本开始,Bash有了内部的正则表达式比较操作符,使用“=~”表示。 Shell 脚本中大部分使用grep或sed命令的正则表达式编写的代码,现在可以由带有“=~”操作符的Bash表达式处理,并且Bash表达式可能使你的脚本更容易阅读和维护。

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

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

相关文章

使用git系统来更新FreeBSD ports源码

FreeBSD跟其它系统相比一大特色就是ports系统。 The Ports Collection is a set of Makefiles, patches, and description files. Each set of these files is used to compile and install an individual application on FreeBSD, and is called a port. By default, the Po…

什么是EcoVadis评级?

EcoVadis评级是一种全球性的公司社会责任评估体系&#xff0c;旨在评估公司在环境、经济、社会和治理四个方面的表现&#xff0c;以帮助公司提高可持续发展的能力。它不仅是一个评估工具&#xff0c;更是一个推动公司实现可持续发展目标的平台。 EcoVadis评级的分级主要包括以…

word-合同排版及签订

合同排版、合同修订、合同保护、合同管理 一、合同排版 1、字体字号管理突出标题 2、通过缩进整理每个层级的内容 3、条款的各级标题要有段前和断后的间距 4、建议将对齐到网格勾掉 合同排版没有一定的规则 合同排版要点&#xff1a; 二、合同修订 推荐使用OfficePLUS.cn找参…

2024 年中国大学生程序设计竞赛全国邀请赛(郑州)暨第六届CCPC河南省大学生程序设计竞赛 problem K. 树上问题

//先找一个美丽的树&#xff0c;然后遍历树找节点,分析是否符合条件。 //画几个图&#xff0c;思考下。 #include<bits/stdc.h> using namespace std; #define int long long const int n1e611; int a,b,c[n],d,l,r,k,w,an; vector<int>t[n]; void dfs(int x,int…

SSD-60S施耐德电机保护器EOCR-SSD

EOCR主要产品有电子式电动机保护继电器&#xff0c;电子式过电流继电器&#xff0c;电子式欠电流继电器&#xff0c;电子式欠电压继电器&#xff0c;其它保护装置&#xff0c;电流互感器。EOCR-SSD 10-60A电机保护器 系列型号: EOCRSSD-05SEOCRssD-30s EOCRSSD-60SEOCRSSD-0…

对比学习笔记

这里写目录标题 什么是对比学习计算机视觉中的对比学习对比学习在NLP中的应用 什么是对比学习 对比学习是在没有标签的前提下学习样本之间的是否相似&#xff0c;其实和二分类比较相似&#xff0c;判断两个图像是不是属于同一个类别。换句话来说就是把相近的分布推得更近&…

深入学习心理学才知道以前高估了自己的交易能力

人的大脑总是能带来无限的惊喜。你能同时完成很多种工作而没有觉察你自己正在做这些事情。比如你一边开车一边打电话讨论着很严肃的事&#xff0c;边吃饭边用眼睛关心着后排坐着的孩子。除了这些外部的动作&#xff0c;你的内脏机能也在马不停蹄的工作着。这一切并不需要我们付…

如何在windows server下安装mysql5.7数据库,并使用Navicat Premium 15可视化工具新建数据库并读取数据库信息。

如何在windows server下安装mysql5.7数据库&#xff1f; MySQL :: Download MySQL Community Server (Archived Versions)https://downloads.mysql.com/archives/community/点击↑&#xff0c;然后选择对应版本和平台↓下载 将下载后的安装包放入固定目录&#xff08;这里以D:…

Spring Cloud Alibaba 分布式配置中心(9)

项目的源码地址 Spring Cloud Alibaba 工程搭建&#xff08;1&#xff09; Spring Cloud Alibaba 工程搭建连接数据库&#xff08;2&#xff09; Spring Cloud Alibaba 集成 nacos 以及整合 Ribbon 与 Feign 实现负载调用&#xff08;3&#xff09; Spring Cloud Alibaba Ribbo…

SpringCloud------Eureka,Ribbon,Nacos

认识微服务 微服务技术栈 微服务概念 微服务结构 微服务技术对比 企业需求 SpringCloud 认识Springcloud 服务拆分及远程调用 每个服务只能查询自己数据库中的表&#xff0c;导致其他服务如果想使用别人的表数据&#xff0c;这就需要进行远程调用&#xff0c;这里使用RestTem…

资料如何打印更省钱

在日常工作和学习中&#xff0c;我们经常需要打印各种资料。然而&#xff0c;随着打印成本的不断提高&#xff0c;如何更省钱地打印资料成为了大家关注的焦点。今天&#xff0c;就为大家分享一些资料打印的省钱技巧&#xff0c;并推荐一个省钱又省心的打印平台。 首先&#xff…

【Qt】常用控件(一)

文章目录 一、核心属性1、enabled代码示例: 通过按钮2 切换按钮1 的禁用状态 2、geometry代码示例: 控制按钮的位置代码示例&#xff1a;window frame 的影响代码示例: 感受 geometry 和 frameGeometry 的区别 3、windowTitle4、windowIcon代码示例: 通过 qrc 管理图片作为图标…

windows安装DrawDB

下载 新建一个目录drawdb,使用git下载&#xff0c;如果没有安装git的话&#xff0c;进入git官网进行下载windows版本 https://git-scm.com/downloads。 空白地方鼠标右键&#xff0c;打开git终端 执行命令&#xff1a; git clone https://github.com/drawdb-io/drawdb 安装依…

服务攻防——数据库安全

第一步: 端口扫描&#xff1a;nmap 扫不到端口&#xff1a;端口被修改&#xff0c;防护软件&#xff0c;放在内网环境 mysql 内置端口3306 第一种官方漏洞 第一步:先扫描有什么端口开发 用这个错误密码一直访问&#xff0c;最终就进去了 弱口令猜解 不可以直接猜解&#x…

STM32(开篇总结)

STM32介绍 STM32是意法半导体公司基于ARM Cortex-M内核开发的32位微控制器 STM32常应用在嵌入式领域&#xff0c;如智能车、无人机、机器人、无线通信、物联网、工业控制、娱乐电子产品等 STM32功能强大、性能优异片上资源丰富、功耗低&#xff0c;是一款经典的嵌入式微控制器…

PSRAM是什么?

1.PSRAM是什么&#xff1f; PSRAM&#xff0c;全称 伪静态随机存储器&#xff0c;它是采用动态随机存储器的工艺和技术&#xff0c;实现类似于静 态随机存储器一样的存储器件。静态随机存储器采用6T架构&#xff0c;而动态随机存储器采用1T&#xff08;晶体管&#xff09;1C&a…

2024年区块链、信号处理与航空航天国际学术会议(ICBSPA 2024)

2024年区块链、信号处理与航空航天国际学术会议&#xff08;ICBSPA 2024) 2024 International Conference on Blockchain, Signal Processing, and Aerospace 一、【会议简介】 随着科技的飞速发展&#xff0c;区块链、信号处理与航空航天等领域的交叉融合正成为推动科技进步的…

栈与队列OJ题【括号适配问题】【用队列实现栈】【用栈实现队列】【设计循环队列】

一.有效的括号 ​​​OJ链接 这一道题我们就可以用栈来解决&#xff1a; 不了解栈的可以看我的上一篇博客。 typedef char STDataType; //用数组来实现栈 typedef struct stack {STDataType* a;int capacity;int top; }ST; void STInit(ST* pst) {assert(pst);pst->a NU…

STK12 RPO模块学习(2)

一、Coast RPO Sequence 这个序列运行卫星直到它达到了下面三个条件之一。 1&#xff09;截至时间。2)圈数到达了限制。3&#xff09;其他条件&#xff0c;比如近地点。 默认情况下&#xff0c;Astrogator使用“Earth HPOP Default v10”预报器。你能够修改呈其他修改器。下…

Mysql与Java连接----JDBC

前言: 当将Java与MySQL数据库连接时&#xff0c;JDBC&#xff08;Java Database Connectivity&#xff09;是一种重要的技术。JDBC允许Java应用程序通过标准的数据库访问方式与不同的关系型数据库进行通信&#xff0c;其中包括MySQL。通过使用JDBC&#xff0c;Java开发人员可以…