Linux命令中的正规表达式元字符大解析

虽然有很多人知道如何使用正则表达式,但一旦要将其运用到各个Linux命令中,相信仍有很多人会有这样的疑问——“这样的写法到底适不适合这条命令?”

只要知道这3种正则表达式元字符集就足够了

不同的命令,对应的正则表达式元字符的集合范围也不一样。但是理论上来说只要知道以下3种(2大类+1个子集)正则表达式元字符集就足够了。

  1. BRE(基本正则表达式)元字符集
  2. ERE(扩展正则表达式)元字符集
  3. EREAWK子集

当然,除了它们之外还有GNU扩展正则表达式元字符集、Perl扩展正则表达式元字符集、JavaScript扩展正则表达式元字符集等等。但如果想在任何UNIX(或者说POSIX)环境下通用,只记住它们三个就绰绰有余了。(就算你不想局限于POSIX,其他的大体上都是在ERE元字符集的基础上加上各自的不同拓展而已,只要ERE掌握得牢固,学习起来也花不了多少精力。)

各Linux命令分别对应哪个元字符集合?

既然知道了对于Linux命令,只有3种分类,那么到底具体是怎样的对应关系呢?只要看下面的表格就一目了然了。

命令对应的元字符集合
AWKERE的AWK子集
edBRE元字符集
egrepERE元字符集
exBRE元字符集
grep(没有’-E’)BRE元字符集
grep(有’-E’)ERE元字符集
moreBRE元字符集
sedBRE元字符集
viBRE元字符集

通常的grep命令(没有-E选项),在部分原来只属于ERE元字符集的字符的前面加上反斜杠\同样能使按照ERE的规则发挥作用。

各元字符集的说明

既然已经知道了具体那条命名对应哪个集合,下面开始详细介绍各个元字符集。

1.BRE(基本正则表达式)元字符集

元字符集中(并不局限于BRE),元字符可以根据使用的场合进一步细分为3组。

a-1.用于匹配字符串的元字符(位于[]外部)
元字符含义
^匹配字符串(通常是一行)的头部
$匹配字符串(通常是一行)的尾部
.匹配任意一个字符
[…]匹配被包围在[]中的任意一个字符
[^…]匹配不被包围在[]中的任意一个字符
*【重复次数指定】前面出现的内容出现了0次以上
{n}【重复次数指定】前面出现的内容出现了n次
{n,}【重复次数指定】前面出现的内容出现了n次
{m,n}【重复次数指定】前面的内容出现了m次以上,n次以下
(…)【内容指定】其包围的内容可以被后面引用
\n【规则复用】指在第n次被(…)包围的匹配规则,用于复用。比如用^([A-Z])123\1 去 匹 配 A B C 123 A B C A B C 。 最 后 去匹配ABC123ABCABC。最后 ABC123ABCABC之前的\1被解释为[A-Z]
\x转义,如^,\\ , 用 于 匹 配 , ,\\用于匹配^, ,\本身
a-2.用于匹配字符串的元字符(位于[]内部)
元字符含义
^如果紧跟在[之后,那么代表取反,否则代表[本身
-用于简单明了地指定匹配字符的范围,而不是逐个列举,如果紧跟在]之前,则代表-本身
[:word:]被称作POSIX字符类。word可以为alnum(所有的字母和数字)、cntrl(所有控制字符)、lower(所有小写字母)、space(空格、Tab、换行)、alpha(所有字母)、digit(所有数字)、print(除了控制字符之外的所有字符)、upper(所有大写字母)、blank(空格、Tab)、graph(控制字符、空格、Tab以外的所有字符等等
[.word.]比如说,[[.hoge.]]就相当于(hoge){1,},但是并不常用
[=x=]比如说,[=a=],可以匹配a、à、â等等,然而这个用法也很不常见
b.用于指定被替换后的字符串(位于sed等的s/A/B/中的B部分)

正则表达式不但用于查找字符串,而且常用于加工(替换)。

元字符含义
\n替换第n次被(…)包围的的内容
&替换成功匹配的全体字符串
\x转义

2.ERE(扩展正则表达式)元字符集

a-1.用于匹配字符串的元字符(位于[]外部)

扩展了BRE,可使用的元字符增加了(如:+|),然而并不一定兼容BRE的用法,主要目的是使得书写更加清晰,如:(){}等等不需要书写烦人的\

元字符含义
+【重复次数指定】前面出现的内容出现了1次以上
{n}【重复次数指定】前面出现的内容出现了n次
{n,}【重复次数指定】前面出现的内容出现了n次
{m,n}【重复次数指定】前面的内容出现了m次以上,n次以下
(…)【内容指定】其包围的内容可以被后面引用
|【逻辑或】只要匹配其左或者右的内容均可,注意以下的写法^ABD
\x转义
a-2.用于匹配字符串的元字符(位于[]内部)

这部分跟BRE相同。

b.用于指定被替换后的字符串(位于sed等的s/A/B/中的B部分)

这部分也是跟BRE一样。但是,

3.ERE中的AWK子集

该子集中缺少的最重要的一个元字符就是用于指定重复次数的{}
实际上,2008版本的POSIX就有将这个元字符加入回去的建议,但现在各操作系统实装的AWK程序很少能做到与ERE通用。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值