博客
关于我
Linux/Unix工具与正则表达式的POSIX规范
阅读量:788 次
发布时间:2023-02-02

本文共 1228 字,大约阅读时间需要 4 分钟。

正则表达式在Unix/Linux环境下的使用可能会让人感到困惑。虽然 Hiringioriate ir enclosure, aubun都知道 d[a-z]+ 这些表达式,它们分别匹配数字字符和小写字母字符。但如果你使用过vi、grep、awk、sed等工具,你会发现这些工具虽然支持正则表达式,但语法有很大不同,甚至常见的表达式可能无法正常匹配或会出现错误。此外,这些工具之间也存在差异,同样的结构可能需要转义或不需要转义,这背后有着深刻的原因。

POSIX 规范

Unix/Linux工具大多采用POSIX规范,而POSIX规范又可分为两大流派:

  • BRE(Basic Regular Expression,基本型正则表达式):在Linux/Unix常用工具如grep、sed、vi中,这种规范占主导地位。它的元字符需要转义,例如 (a)b 只能匹配 (a)b 而非ab。而像 {1,2} 只有在转义后才可以正确匹配多次字符。这种转义是由于这些工具的开发时间较早,且正则表达式功能逐步扩展而产生的兼容性需求。
  • ERE(Extended Regular Expression,扩展型正则表达式):主要用于egrep、awk等工具。与BRE相比,ERE的元字符不需要转义,例如 (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工具进行数据处理和分析。

    转载地址:http://vzzfk.baihongyu.com/

    你可能感兴趣的文章
    linux xampp php更改,Linux下xampp 安装php扩展(linux配置memadmin)
    查看>>
    Linux —— 信号初识
    查看>>
    Linux —— 信号(3)
    查看>>
    Linux —— 信号(4)
    查看>>
    Linux 上 Python 中的环境变量
    查看>>
    linux 上定时任务执行shell脚本
    查看>>
    Linux 上查看和刷新 DNS 缓存
    查看>>
    linux 下 php 安装 libevent
    查看>>
    Linux 下 `/etc/limits.conf` 文件中的配置详解:`* soft nofile 65535` 和 `* hard nofile 65535` 以及 `* soft nproc
    查看>>
    Linux 下DNS详解
    查看>>
    Linux 下PHP扩展开发系列:二. 一个典型的扩展开发
    查看>>
    linux 下使用isign 签名ipa包
    查看>>
    linux 下安装php扩展
    查看>>
    linux 下安装redis并设置开机自启动
    查看>>
    Linux 下查看java进程
    查看>>
    Linux 下格式化新磁盘、挂载新磁盘,并且实现开机自动启动
    查看>>
    linux 下监控进程流量情况命令 NetHogs
    查看>>
    Linux 下进行服务器间网络测速
    查看>>
    linux 下部署nodejs(两种方式)
    查看>>
    Linux 不同方法查看进程消耗CPU IO 等
    查看>>