bash中的=〜运算符支持哪种正则表达式语法?

Lás*_*gyi 2 bash

我发现我可以在4.2.10(1)BASH中使用=~ operator而不是exprcommand.它(在一个命令中)要快得多,expr而且这个事实在重复循环中很重要.

我能够使用正则表达式的大多数元字符但不是全部.

例如,我可以检查字符串是否匹配3个重复(一个小写字母,一个数字,一个点):

[[ "b3.f5.h3." =~ ^([a-z][0-9]\.){3}$  ]] && echo OK
OK
Run Code Online (Sandbox Code Playgroud)

我可以选择匹配的子串:

[[ "whatis12345thetwo765nmbers" =~ ^[a-z]+([0-9]+)[a-z]+([0-9]+) ]] && \
echo "The two number fields are: ${BASH_REMATCH[1]}  ${BASH_REMATCH[2]}"
The two number fields are: 12345  765
Run Code Online (Sandbox Code Playgroud)

但我想使用更多元字符,例如此TLDP页面上列出的元字符.

我特别想匹配字边界:\b,\B,\<,\>.

我试图在Advanced Bash-Scripting Guide(第18章和第37章)中找到答案,但没有成功.

我在哪里可以找到=~运营商的详细说明?

目前我只对BASH感兴趣而不是gawk,sed,perl或其他工具.

Cha*_*ffy 5

=~支持POSIX ERE,除了本地C库添加的扩展之外没有扩展(字面意思是,它调用标准C库的正则表达式调用).因此,有关它保证支持的功能的规范文档(与本地C库可能添加的可选功能相反)是ERE上的规范,IEEE 1003.1,第9.4节.


为了放大这一点:任何东西,例如\<,由一个特定的libc(即glibc)添加但在POSIX规范中不存在,不能期望在所有平台bash支持上可移植地工作.

POSIX的指定的特殊字符(如在该标准的第9.4.3节给出)不包括 <,>,bB; 这些都是GNU扩展和非便携式.