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

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

正则表达式的操作实例

  • (一)概述
    • 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]+$ ]]; thenecho "It's a number"
elseecho "It's not a number"
fi
  • 使用POSIX字符类
read -p "Input a number ,Please: " numif [[ $num =~ [[:digit:]]+$ ]]; thenecho "It's a number"
elseecho "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}$ ]]; thenecho "This email address looks fine: $email"
elseecho "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 ]; thenecho "Usage: $0 address"exit 1
elseip=$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]?)$ ]]; thenecho "Looks like an IPv4 IP address."
elif [[ $ip =~ ^[A-Fa-f0-9:]+$ ]]; thenecho " Cloud be an IPv6 IP address."
elseecho '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.hqwc.cn/news/695585.html

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

相关文章

光伏EPC管理软件都有哪些功能和作用?

光伏EPC管理软件是用于光伏工程项目管理的综合性工具&#xff0c;它涵盖了从项目策划、设计、采购、施工到运维的各个环节。 1、项目总览 管理所有项目计划&#xff0c;包括项目类型、项目容量等。 调整和优化项目计划&#xff0c;以应对不可预见的情况。 2、施工管理 制定…

上传到 PyPI

将软件包上传到 PyPI&#xff08;Python Package Index&#xff09;&#xff0c;您需要遵循以下步骤&#xff1a; 准备软件包&#xff1a;确保您的软件包满足以下要求&#xff1a; 包含一个 setup.py 文件&#xff0c;用于描述软件包的元数据和依赖项。包含软件包的源代码和必要…

QT的创建,发现编译器有一个黄色三角形感叹号,提示说Cmake配置错误,该怎么办?

确保你安装了Cmake 2.如果你电脑之前已经装了Cmake&#xff0c;那么在qt安装中&#xff0c;即便你选择了Cmake版本&#xff0c;但依旧不会修改电脑的Cmake版本。这时候就会出现黄色箭头。在勾勾的地方会有一个黄色感叹符号&#xff08;我已经解决了&#xff0c;所以没有显示&a…

持续集成-Git

重要步骤命令 git init (初始化一个仓库) git add [文件名] (添加新的文件) git commit -m [关于本次提交的相关说明] (提交) git status (查看文件状态) git diff (如果文件改变&#xff0c;比较两个文件内容) git add[文件名] || git commit -a -m [关于本次提交的相关说…

【SpringBoot记录】从基本使用案例入手了解SpringBoot-数据访问-更改DataSource(2)

前言 通过上一个数据访问基本案例成功可以发现&#xff0c;SpringBoot在数据访问案例中也做了许多自动配置&#xff0c;上节只分析了其中的Properties。 而在自动配置包的jdbc下 还有其他配置文件。 根据名称可以大致了解他们的作用&#xff1a; DataSourceAutoConfiguration…

0509BBQ的Maven项目

0509BBQ的Maven项目包-CSDN博客 数据库字段 登录界面 点餐主页 登录完成进入点餐主页&#xff0c;显示已点餐的数据 点击点餐按钮&#xff0c;生成对应订单数据。 取消勾选点餐按钮&#xff0c;删除对应订单数据。 点击加减图片&#xff0c;实现对数量的加减 展示订单 ajax动态…

朋友在阿里测试岗当HR,给我整理的面试题文档

以下是软件测试相关的面试题及答案&#xff0c;欢迎大家参考! 1、你的测试职业发展是什么? 测试经验越多&#xff0c;测试能力越高。所以我的职业发展是需要时间积累的&#xff0c;一步步向着高级测试工程师奔去。而且我也有初步的职业规划&#xff0c;前3年积累测试经验&…

MP4视频转gif怎么做?看看这篇就会了

喜欢刷短视频的小伙伴经常会看到各种好玩有趣的片段&#xff0c;想要通过自己将这段视频制作成gif动态图片的还不想下载软件的时候要怎么办呢&#xff1f;这个很简单&#xff0c;不需要下载什么软件用专业的Gif动画制作网站&#xff0c;支持超清的画质导出&#xff0c;能够完成…

Excel 两层分类后的行转列

例题描述 Excel 文件中有下图所示的数据&#xff0c;同 Name 的物品可能有多种颜色。 现在想要把数据列出下图的形式&#xff0c;每种Type一行&#xff0c;其后依次列出每种Name及其Color。 实现方法 使用 Excel 插件 SPL XLL 在空白单元格写入公式&#xff1a; spl("…

数字人实训室助推元宇宙人才培养

如今&#xff0c;全身动作捕捉设备已经大量应用在影视、动画、游戏领域&#xff0c;在热门的元宇宙内容领域中&#xff0c;全身动作捕捉设备逐步发挥着重要的作用&#xff0c;在包括体育训练、数字娱乐虚拟偶像、虚拟主持人、非物质文化遗产保护等等场景&#xff0c;数字人实训…

RTMP协议详解

本篇博客主要讲解RTMP协议重点&#xff0c;包括握手、连接、消息类别以及解码后各类型帧的缓存帧数设置等内容。 本专栏知识点是通过<零声教育>的音视频流媒体高级开发课程进行系统学习&#xff0c;梳理总结后写下文章&#xff0c;对音视频相关内容感兴趣的读者&#xff…

阿里云短信提示被攻击怎么解决!!

你是否收到过这样的短信&#xff0c;【阿里云】尊敬的用户&#xff1a;您的IP: 实例名称&#xff1a; 受到攻击流量已超过云盾DDoS基础防护的带宽峰值&#xff0c;服务器的所有访问已被屏蔽&#xff0c;如果35分钟后攻击停止将自动解除否则会延期解除。详情请登录云盾控制台DDo…