我发现我可以使用=~
运算符而不是expr
我的 4.2.10(1) BASH 中的命令。它比(在命令内)快得多expr
这个事实在大量重复的循环中可能很重要。
我能够使用正则表达式的大部分元字符,但不是全部。
例如,我可以检查一个字符串是否精确匹配 3 次重复(一个小字母、一个数字、一个点):
[[ "b3.f5.h3." =~ ^([a-z][0-9]\.){3}$ ]] && echo OK
OK
我可以选择匹配的子字符串:
[[ "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
但我想使用更多元字符,例如上面列出的元字符此 TLDP 页面.
我特别想匹配单词边界:\b
, \B
, \<
, \>
.
我试图在其中找到答案高级 Bash 脚本指南(第18章和第37章)但没有成功。
哪里可以找到详细的说明=~
操作员?
目前我只对 BASH 感兴趣,对 gawk、sed、perl 或其他工具不感兴趣。
=~
支持 POSIX ERE,除了本地 C 库添加的扩展之外没有任何扩展(从字面上看,它调用标准 C 库的正则表达式调用)。因此,关于它保证支持的功能的规范文档(而不是您的本地 C 库可能另外添加的可选功能)是 ERE 的规范,IEEE 1003.1,第 9.4 节.
放大这一点:任何东西,例如\<
,由一个特定的 libc(即 glibc)添加,但不存在于 POSIX 规范中不能指望在 bash 支持的所有平台上可移植地工作.
POSIX 指定的特殊字符(如标准第 9.4.3 节给出) 不包括 <
, >
, b
or B
;这些都是 GNU 扩展并且不可移植。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)