当前位置: 首页 > article >正文

Shell编程之正则表达式

1、正则表达式与通配符

Linux中的正则表达式(regular expression)和通配符(wildcard)都是用于匹配字符串的工具,但它们之间存在一些区别和应用场景的不同。

正则表达式是描述一种字符串匹配的模式,通过特殊的字符和语法,可以检查一个字符串是否匹配某种模式,匹配成功后可以进行子串替换、取出符合条件的子串等操作。
比如,使用正则表达式 runoo+b 可以匹配 runoob、runooob、runoooooob 等字符串,其中 + 表示匹配前面的字符 o 至少一次。Linux系统中常用的正则表达式引擎包括grep、sed和awk等。

通配符主要用于匹配文件名或路径名,在Linux系统中通配符可以用来快速查找符合特定规则的文件名或路径名。在通配符中,星号 (*) 代表匹配任意长度的任意字符,问号 (?) 代表匹配任意单个字符。
比如,使用通配符 *.txt 可以查找当前目录下所有后缀为 .txt 的文件。除此之外,Linux系统中还有一些其他的通配符,如方括号([])、花括号({})等,可用于更灵活的匹配。

虽然 Linux 中的正则表达式和通配符都可以用于字符串匹配,但正则表达式支持更加复杂的规则和语法,可以实现更加精确的匹配,通配符相对来说则较为简单,只能进行基本的字符串匹配以及文件名或路径名匹配。

2、基础正则表达式

在 Linux 中,基础正则表达式是指 Basic Regular Expressions (BRE),其特点是使用一些基本的元字符来匹配字符串。
以下是一些基础的元字符及其作用

  • . :匹配任意单个字符。比如 a.c 可以匹配 abc、adc、axc 等字符串。
  • ^ :匹配行首字符。比如 ^hello 可以匹配行首为 hello 的字符串。
  • $ :匹配行尾字符。比如 hello$ 可以匹配行末为 hello 的字符串。
  • [] :字符集,匹配其中的任意一个字符。比如 [abc] 匹配 a 或 b 或 c。
  • [^] :否定字符集,匹配不在其中的任意一个字符。比如 [^abc] 匹配除 a、b、c 以外的任意一个字符。
  • \ :转义字符,可以将特殊字符转义为普通字符,例如 \. 可以匹配 . 字符本身。
  • * :匹配前面的字符零次或多次。比如 ho*l 可以匹配 hl、hol、hool 等字符串。
  • \{m\} :匹配前面的字符 m 次。比如 ho\{2\}l 匹配 hool,但不匹配 hol 或 hoool。
  • \{m,\} :匹配前面的字符至少 m 次。比如 ho\{2,\}l 匹配 hool、hoool、hoooooool 等字符串。
  • \{m,n\} :匹配前面的字符至少 m 次,至多 n 次。比如 ho\{2,4\}l 匹配 hool、hoool、hoooool,但不匹配 hol 或 hoooooool。
  • () :用于分组操作,例如 (abc)+ 表示匹配一个或多个 abc。
  • | :用于选择操作,例如 cat|dog 可以匹配 cat 或 dog。

举例:

查找包含 he 并以 l 结尾的行:

grep 'he.*l$' test.txt

查找包含三个连续小写字母的单词:

grep '[a-z]\{3\}' test.txt

查找包含至少三个连续小写字母的单词:

grep '[a-z]\{3,\}' test.txt

查找包含两到五个连续小写字母的单词:

grep '[a-z]\{2,5\}' test.txt

查找包含 a, e, 或 i 中的任意一个字符的单词 and 查找不包含 a, e, 或 i 中的任意一个字符的单词:

grep '[aei]' test.txt
grep '[^aei]' test.txt

查找以 c 开头,以 t 结尾,并在中间包含两个字母的单词:

grep '^c(..)t$' test.txt

查找包含 e 或 l 的行:

grep 'e|l' test.txt

http://www.kler.cn/a/16324.html

相关文章:

  • 「人眼视觉不再是视频消费的唯一形式」丨智能编解码和 AI 视频生成专场回顾@RTE2024
  • IC 脚本之python
  • Mac intel 安装IDEA激活时遇到问题 jetbrains.vmoptions.plist: Permission denied
  • 如何使用ffmpeg命令行进行录屏
  • 深度学习之卷积问题
  • Linux如何更优质调节系统性能
  • 干货 | 赵亚雄:大模型、AI经济和AI基础设施
  • 线性表之单链表(详解)
  • c语言和cpp里面的强制类型转换
  • 嵌入式linux学习笔记--虚拟局域网组网方案分享,基于自组zerotier -planet 网络的方案
  • RabbitMQ面试题
  • Linux系统操作案例-配置Nginx的负载均衡与转发
  • 110页智慧农业解决方案(农业信息化解决方案)(ppt可编辑)
  • Spring 5 笔记 - AOP
  • 【python知识】__init__.py的来龙去脉
  • 【Mysql】基础篇:DML(data manipulation language)语句:增、删、改数据库数据总结
  • pod之debug初始化容器
  • 最优化方法Python计算:一元函数搜索算法——二分法
  • 【iOS】GCD学习
  • 【机器学习学习】第一天:入门指南
  • spring
  • QT实现固高运动控制卡示波器
  • 【SQL篇】面试篇之子查询
  • 一文解决MySQL突击面试,关键知识点总结
  • 解除Word的编辑保护【简单版】
  • 智能网联汽车城市化的进程和思考