观察输出的建议答案less --version
并没有解决我在 Solaris 10 上的情况——前两行如下:
less 436
Copyright (C) 1984-2009 Mark Nudelman
我在动态依赖项列表中看不到明显的正则表达式库:
$ ldd /usr/bin/less
libcurses.so.1 => /lib/libcurses.so.1
libc.so.1 => /lib/libc.so.1
libm.so.2 => /lib/libm.so.2
/lib/libm/libm_hwcap1.so.2
/platform/sun4v/lib/libc_psr.so.1
man libc
表示库提供了多个正则表达式接口regcmp
:re_comp
和regcomp
.
通过elfdump
对二进制文件运行,我可以看到对符号的引用regcomp
:
$ elfdump /usr/bin/less | egrep -i 'posix|pcre|regcmp|re_comp|regcomp|regcomp-local'
[452] 0x0003d6a0 0x00000000 FUNC GLOB D 0 UNDEF regcomp
[452] regcomp
R_SPARC_JMP_SLOT 0x3d6a0 0 .rela.plt regcomp
如果这是指向regcomp
正则表达式编译器函数的链接,那么来自@hek2mgl 的答案中的 README 文本表明该less
二进制文件可能使用 POSIX 正则表达式(或 Spencer V8 正则表达式,如果编译成二进制文件?)。
手册页regcomp(3C)
内容如下:
DESCRIPTION
These functions interpret basic and extended regular expres-
sions (described on the regex(5) manual page).
尝试在 中进行搜索less
,我发现正则表达式重复运算符{...}
可以在没有反斜杠转义的情况下工作。我系统上的联机帮助页regex(5)
将其定义为扩展正则表达式 (ERE) 语法。
最后,我发现了一些关于各种正则表达式引擎接口的有趣描述,总结如下:
Engine Interface
---------------- --------------------------------
GNU re_compile_pattern() and regex.h
PCRE pcre_compile and pcre.h / pcre2_compile and pcre2.h
POSIX regcomp() and regex.h
Henry Spencer V8 regcomp() and regexp.h
BSD re_comp()
System V regcmp()