gpt4 book ai didi

bash - bash 中的 =~ 运算符支持哪些正则表达式语法?

转载 作者:行者123 更新时间:2023-11-29 09:42:58 24 4
gpt4 key购买 nike

我发现我可以使用 =~ 运算符而不是 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

但我想使用更多元字符,例如 this TLDP page 中列出的那些.

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

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

哪里可以找到的详细描述=~ 运营商?

目前我只对 BASH 感兴趣,对 gawk、sed、perl 或其他工具不感兴趣。

最佳答案

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


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

POSIX 指定的特殊字符(如 given in section 9.4.3 of the standard )不包括 < , > , bB ;这些都是 GNU 扩展并且不可移植。

关于bash - bash 中的 =~ 运算符支持哪些正则表达式语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35457498/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com