确定系统提供的正则表达式库

确定系统提供的正则表达式库

我昨天尝试使用以下正则表达式less^\+1[[:space:]]*$,它对我有用grep。这在 中不起作用less,所以我检查了联机帮助页以了解它支持什么,并发现了以下内容:

/pattern
    Search forward in the file for the N-th line containing the pattern. N defaults to 1. The pattern is a regular expression, as recognized by the regular expression library supplied by your system. 
    The search starts at the first line displayed (but see the -a and -j options, which change this).

我在 中提出了这个问题/dev/chat,对于使用什么库,甚至选择库的优先级,(对我来说)没有太多共识,更不用说实际检查当前使用的库的方法了。我目前使用 Fedora 30,但希望答案与 Linux 无关。

所以,问题是:

  1. 如何确定我的系统提供了哪些less将使用的正则表达式库?
  2. 我的系统提供的正则表达式库意味着什么?
  3. 此提供的正则表达式库还会影响哪些其他实用程序和程序?
  4. 如果您提到系统可能使用的任何特定正则表达式库,请提供该正则表达式库页面的链接(如果可能)。

ldd节目

[unge@localhost ~]$ ldd "$(command -v less)"
    linux-vdso.so.1 (0x00007fff040e0000)
    libtinfo.so.6 => /lib64/libtinfo.so.6 (0x00007f6733339000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f6733173000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f67333be000)

答案1

  1. 如果您指的是less二进制文件,less --version则会告诉您它正在使用哪个正则表达式实现;例如

    $ less --version
    less 487 (GNU regular expressions)
    Copyright (C) 1984-2016  Mark Nudelman
    
    less comes with NO WARRANTY, to the extent permitted by law.
    For information about the terms of redistribution,
    see the file named README in the less distribution.
    Homepage: http://www.greenwoodsoftware.com/less
    

    --with-regex在构建时,库由给定的值确定./configure

    --with-regex=LIB        select regular expression library (LIB is one of auto,none,gnu,pcre,posix,regcmp,re_comp,regcomp,regcomp-local) [auto]
    

    并在构建日志中进行跟踪。

    其中一些实现可作为单独的库提供(pcre例如),其他实现包含在 C 库中(gnu例如),其中之一包含在less源代码中 ( regcomp-local)。

  2. less我认为该表达式指的是构建系统上可用的任何库,auto至少在选项的上下文中。一旦构建,给定的less二进制文件将不会更改其正则表达式实现。

  3. 没有任何。

支持的库有:

  • POSIXregcomp(在版本字符串中标识为“POSIX”);
  • 聚合酶链式反应(“PCRE”);
  • GNU C 库re_compile_pattern(“GNU”);
  • regcmp(“V8”);
  • Unix V8 regcomp,由系统提供或less自己的副本(Henry Spencer 的实现;“Spencer V8”);
  • re_comp(“BSD”)。

相关内容