
Linux/Unix工具与正则表达式的POSIX规范
BRE(Basic Regular Expression,基本型正则表达式):在Linux/Unix常用工具如grep、sed、vi中,这种规范占主导地位。它的元字符需要转义,例如 ERE(Extended Regular Expression,扩展型正则表达式):主要用于egrep、awk等工具。与BRE相比,ERE的元字符不需要转义,例如
发布日期:2025-04-07 07:41:25
浏览次数:5
分类:精选文章
本文共 1228 字,大约阅读时间需要 4 分钟。
正则表达式在Unix/Linux环境下的使用可能会让人感到困惑。虽然 Hiringioriate ir enclosure, aubun都知道 d
和 [a-z]+
这些表达式,它们分别匹配数字字符和小写字母字符。但如果你使用过vi、grep、awk、sed等工具,你会发现这些工具虽然支持正则表达式,但语法有很大不同,甚至常见的表达式可能无法正常匹配或会出现错误。此外,这些工具之间也存在差异,同样的结构可能需要转义或不需要转义,这背后有着深刻的原因。
POSIX 规范
Unix/Linux工具大多采用POSIX规范,而POSIX规范又可分为两大流派:
(a)b
只能匹配 (a)b 而非ab。而像 {1,2}
只有在转义后才可以正确匹配多次字符。这种转义是由于这些工具的开发时间较早,且正则表达式功能逐步扩展而产生的兼容性需求。(ab|cd)
可以直接匹配ab或cd。此外,量词和其他功能如\1
反向引用在这些工具中通常得到了支持。BRE 与 ERE 的区别
流派 | 说明 | 工具 |
---|---|---|
BRE | (、)、{、} 必须转义 | grep、sed、vi |
GNU BRE | 类似BRE,但支持 \+ 和 \? | GNU grep、GNU sed |
ERE | 元字符不需转义 | egrep、awk |
GNU ERE | 类似ERE,但支持反向引用 | grep –E、GNU awk |
POSIX 字符组
除了正则表达式之外,POSIX规范还定义了字符组表示法(bracket expression):
- 其注重与PCRE的区别在于,POSIX字符组不支持转义。例如,
[:digit:]
只能匹配保存和d
这两个字符。 - 特殊符号的表示方法也具有独特之处,如
[a-]
匹配a
和-
,而[]]
匹配]
和a
。
POSIX 字符组 示例
字符组 | ASCII语言环境 | Unicode语言环境 |
---|---|---|
[:alnum:] | [a-zA-Z0-9] | [\p{L}\p{Nd}] |
[:alpha:] | [a-zA-Z] | \p{L} |
[:cntrl:] | [^\t\n\x00-\x1F\x7F] | \p{Cc} |
[:digit:] | [0-9] | \p{Nd} |
[:space:] | [ \t\r\n\v\f] | [\p{Z}\t\r\n\v\f] |
总结
理解POSIX规范的重要性,尤其是在处理不同工具和正则表达式时至关重要。在实际操作中,明确工具的正则表达式风格并遵循对应的规则,可以避免误解和匹配错误。通过熟悉这些差异,你可以更高效地使用Unix/Linux工具进行数据处理和分析。
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年05月05日 04时24分31秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
linux 通过inode删除文件
2023-02-02
Linux 通过SSH跳板机实现端口转发
2023-02-02
Linux 通过压缩包安装 MySQL 并设置远程连接教程
2023-02-02
Linux 通过监控系统内存并定时重启指定服务
2023-02-02
Linux 逻辑卷详解
2023-02-02
Linux 部署ASP.NET SQLite 应用 的坎坷之旅 附demo及源码
2023-02-02
linux 配置 skywalking
2023-02-02
linux 配置 vsftpd 匿名用户可增加、修改、删除文件
2023-02-02
linux 重启服务脚本,常见的linux上的服务重启脚本
2023-02-02
Linux 重置root密码和修改用户密码
2023-02-02
Linux 问题故障定位的技巧大全
2023-02-02
Linux 问题故障定位(非常详细)零基础入门到精通,收藏这一篇就够了
2023-02-02
linux 防火墙操作
2023-02-02
Linux&Debian系统安装nginx
2023-02-02
Linux(Centos)上使用crontab实现定时任务(定时执行脚本)
2023-02-02
Linux(Centos)远程传输文件到另一台电脑机器上---指令(scp)
2023-02-02
Linux(Centos为例)使用Docker安装Label-Studio
2023-02-02
Linux***检测基础学习
2023-02-02
linux+nginx+php+mysql安装及配置
2023-02-02