Shell中的正则脚本

在之前的文章《使用Husky管理项目的Git Hooks(以配置Uni-app的ESLint和Commit Lint为例)》中介绍了使用Husky添加Commit Lint的方法,其实里面有点小插曲。

我想要格式

feature/(big|small|middle): xxxxxx

比如:

清明出行礼包/big: 初始化项目

通常的正则

^\w+\/(big|small|middle):\s*\S+

但我这个在Shell中写了之后发现,shell中根本不支持\w这样的元字符(我也没找到原因)

Shell的写法

在参考了《Linux命令行与Shell脚本编程大全》中的内容后,修改如下:

^[[:graph:]]+\/(big|small|middle):[[:space:]]*[[:graph:]]+

原因

在Linux中有2种流行的正则表达式引擎:

  1. POSIX基础正则表达式 – BRE
  2. POSIX扩展正则表达式 – ERE

大多数Linux工具至少符合BRE规范,那在POSIX引擎中匹配单词之类的就不能用\w这种,要用POSIX专用的。常见的有:

小结

就是一个引擎问题,纠结了2天,结果周末在一本买了很久但没看的书里找到了,果然书中自有颜如玉,啊呸,黄金屋。