我们一起来学Shell - 正则表达式

本文介绍了Shell中正则表达式的基础知识,包括元字符、应用举例以及POSIX方括号表达式的使用方法。通过本文,读者可以了解如何在Shell环境中运用正则表达式进行文本匹配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


我们一起来学Shell - 初识shell
我们一起来学Shell - shell的变量
我们一起来学Shell - shell的条件判断
我们一起来学Shell - shell的循环控制
我们一起来学Shell - shell的数组
我们一起来学Shell - shell的函数
我们一起来学Shell - shell的并发及并发控制
我们一起来学Shell - 正则表达式

什么是正则表达式

  • 正则表达式(Regular Expression,通常简称为 regex 或 RE)是一种字符表达方式,可以用它来查找匹配特定准则的文本。在许多编程语言中都有用到正则表达式,常用它来实现一些复杂的匹配。

  • 正则表达式是对字符串进行操作的一种逻辑公式,即用事先定义好的的一些特定字符以及这些特定字符的组合,组成一个有一定规则的字符串(Regular Expression),使用这个有一定规则的字符串来表达对字符串的一种过滤逻辑。正则表达式被广泛应用于Linux和许多其他编程语言中,而且不论在哪里,其基本原理都是一样的。

  • 正则表达式是由两个基本组成部分所建立:一般字符特殊字符一般字符是指没有任何特殊意义的字符特殊字符,常称为元字符 (metacharacter),或 meta 字符,正则表达式将匹配被查找行中任何位置出现的相同模式。在正则表达式中,元字符是最重要的概念。在某些情况下,特殊字符也可被视为一般字符(使用转义符 \ 进行转义)

  • POSIX 有两种风格的正则表达式,基本正则表达式(BRE)扩展正则表达式(ERE)。这两种风格的正则表达式在一些字符含义上有细微的差距。以常用的 grep 指令来说,grep 指令默认支持的是 BRE若要使用 ERE 进行匹配,可以使用 -E 选项

正则表达式元字符

字符BRE/ERE含义
.BRE&ERE匹配任意单个字符(除字符串结束符 NUL)
^BRE&ERE匹配行首,如 ^abc,匹配以 abc 开头的字符串
$BRE&ERE匹配行尾,如 abc$,匹配以 abc 结尾的字符串
*BRE&ERE匹配 0 个或任意多的单个字符,前置字符可以是正则表达式
+ERE匹配前面正则表达式的 1 个或多个实例
ERE匹配前面正则表达式的 0 个或 1 个实例
[...]BRE&ERE方括号表达式,匹配方括号内的任一字符,常配合 - 符使用,表示匹配一个连续的范围。 ^ 字符作为方括号内的第一个字符表示匹配不在方括号内的任意字符
-BRE&ERE连字符,在方括号表达式中使用,表示连续字符的范围(范围会因 locale 而有所不同,因此不具可移植性)
{n,m}ERE区间表达式,表示匹配在它前面的字符 n 到 m次。其中,n 与 m 的值必须介于 0-RE_DUM _MAX(含)之间,后者最小值为255
{n}ERE表示匹配在这之前的字符 n 次
\{n,m\}BRE功能同 {n,m}
\{n\}BRE功能同{n}
\BRE&ERE转义符
()ERE匹配位于方括号括起来的正则表达式群
\( \)BRE将( 与 )\ 之间的模式保存在特殊的“保留空间”中,最多可以存储9个,可以通过后续的转义序列 \n 来匹配保留空间中的模式
\nBRE与 ( ) 结合起来使用,\1匹配第一个子模式、 \2匹配第二个,最多到 \9
\|ERE匹配位于 | 符号前或后的正则表达式

正则表达式应用举例

字符用处
.*所有字符
^[^]非字符组内的字符开头的行
[a-z]小写字母
[A-Z]大写字母
[a-Z]小写和大写字母
[0-9]数字
\<单词头 单词一般以空格或特殊字符做分隔,连续的字符串被当做单词
\>单词尾
POSIX 方括号表达式
  • 为了配合非英语的环境,POSIX 标准强化其字符集范围的能力 (如 [a-z]),以匹配非英文字母字符。POSIX 使用方括号表达式 […] 来表示一个范围值,在方括号表达式里,除了字面上的字符外(a、b、c等),另有额外的组成部分,包括:
  1. 字符集:以 [: ... :] 将关键字组合括起来的 POSIX 字符集,关键字描述各种不同的字符集;

  2. 排序符号:排序符号将多个字符序列视为一个单位(如,locale 中将 ch 这两个字符视为一个单位),它使用 [..] 将字符组合括起来,在系统所使用的特定 locale 上各有其定义;

  3. 等价字符集:等价字符集列出的是应视为等值的一组字符,它由取自于 locale 的名字元素组成,以 [==] 括住。

POSIX 字符集列表:

类别匹配字符
[:alnum:]数字字符
[:alpha:]字母字符
[:blank:]空格与定位符
[:cntrl:]控制字符
[:digit:]数字字符
[:graph:]非空格字符
[:lower:]小写字母字符
[:upper:]大写字母字符
[:space:]空白符
[:print:]可显示的字符
[:punct:]标点符号字符
[:xdigit:]十六进制数字
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值