Shell脚本之正则表达式

本文详细解析了grep和egrep(扩展grep)在正则表达式中的特殊字符、匹配符、限定符和POSIX特殊字符的使用技巧,通过实例帮助理解如何精确和模糊匹配字符串,以及如何利用它们进行字符串操作和文件搜索。

egrep 相当于 grep -E
1. 特殊字符

^ : 锚定开头^a, 以a开头, 默认锚定一个字符
$ :锚定结尾a$, 以a结尾, 默认锚定一个字符

示例:

egrep "^ac$" file    # 精确匹配以a开头, 以c结尾
egrep "^a" file      # 模糊匹配以a开头
egrep "c$" file      # 模糊匹配以c结尾

2. 匹配符:匹配字符串

.  : 匹配除回车以外的任意一个字符
() : 字符串分组
[] : 定义字符类, 匹配括号中的一个字符
[^] : 表示否定括号中出现字符类中的字符,取反。
\ : 转移字符

示例:

egrep "^a.c$" file  # 匹配a开头、c结尾、中间任意一个字符发字符串
egrep "^a[0-9]c$" file   # 匹配a开头、c结尾、中间一个字符在0-9范围的字符串
egrep "^a[^0-9]c$" file  # 匹配a开头、c结尾、中间一个字符不在0-9的字符串
egrep "^a\*c$" file   # 匹配a开头、c结尾、中间是*的字符串
egrep "^(a|b)c$" file # 匹配a开头或b开头、c结尾的字符串

3. 限定符:对前面的字符或者字符串做限定说明

 ? : 与星号相似, 但略有变化, 表示该字符出现一次或不出现
+ : 与星号相似, 表示其前面字符出现一次或多次, 但必须出现一次
{n,m}:某个字符之后出现, 表示该字符最少n次, 最多m次
{m}: 正好出现了m次

示例:

egrep "^ab*c$" file  #  匹配a开头、c结尾、中间b出现多次或者不出现的字符串
egrep "^ab?c$" file  #  匹配a开头、c结尾、中间b出现一次或者不出现的字符串
egrep "^ab+c$" file  #  匹配a开头、c结尾、中间b出现一次或多次的字符串
egrep "^ab{3}c$" file  #  匹配a开头、c结尾、中间b出现三次的字符串
egrep "^ab{2,5}c$" file  #  匹配a开头、c结尾、中间b出现2-5次的字符串

3. POSIX特殊字符

[:alnum:] : 匹配任意字母字符0-9 a-z A-Z
[:alpha:] : 匹配任意字符, 大写或小写
[:digit:] : 数字0-9
[:graph:] : 非空字符(非空格控制字符)
[:lower:] : 小写字符a-z
[:upper:] : 大写字符A-Z
[:cntrl:] : 控制字符
[:print:] : 非空字符(包括空格)
[:punct:] : 标点符号
[:blank:] : 空格和TAB字符
[:xdigit:] : 16进制数字
[:space:] : 所有空白字符(新行、空格、制表符)
注: [[ ]] 双中括号的意思:第一个中括号是匹配符[] 匹配中括号中的任意一个字符, 第二个[]是格式,如[:digit:]

示例:

egrep "^a[[:alnum:]]c$" file  # 匹配a开头、c结尾、中间是任意数字或字母的字符串
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值