【问题标题】:Is there a shortcut for word boundary in `less`?`less`中是否有单词边界的快捷方式?
【发布时间】:2014-05-09 13:07:15
【问题描述】:

这是我使用的较少:

less 458 (POSIX regular expressions)
Copyright (C) 1984-2012 Mark Nudelman

在 Vim 中是 \<\>,在大多数其他正则表达式中是 \b

【问题讨论】:

  • ldd /usr/bin/less 的输出是什么(假设这是正确的路径)?
  • 我没有 ldd(这是 OS X)

标签: unix


【解决方案1】:

在 OS X 10.11.5 上的系统 less 中,字符类 [[:<:]][[:>:]] 分别匹配单词的开头和结尾。我还没有找到使记录在案的简短表格\<\>\b 工作的方法。

(感谢denis 建议检查man 7 re_format。)

【讨论】:

  • 非常复杂的解决方案。再一次,Mac OS 的行为与其他任何地方都不同。
【解决方案2】:

您的less 版本是使用posix 正则表达式构建的,就像:

wget http://ftp.gnu.org/gnu/less/less-451.tar.gz
tar zxf less-451.tar.gz
cd less-451
./configure --with-regex=posix
make

但是,\< 是否有效的原因显然不取决于此:

  • 在 Debian/Linux 中,\< 可以正常工作,即使您使用上述命令和 posix regex 进行构建
  • 在 Mac OS X 中,我尝试了 --with-regex 的所有可能值,pcre 除外,而 \< 不适用于其中任何一个。如果我使用pcre 构建,那么\b 可以工作,而不是\<

最后,我不知道如何使它与\< 一起工作。但是您可以使用pcre 构建自己,然后它应该可以使用\b。如果您不是系统管理员,您可能希望使用--prefix 安装在您的主目录下,例如--prefix=$HOME/opt。在make 步骤之后,确认它与./less /path/to/some/file 一起使用。如果看起来不错,则以make install 结束。

【讨论】:

  • 在带有homebrew 的 MacOS 上:brew install less --with-pcre 将使用 PCRE-regular-expressions 功能自动编译更少。
【解决方案3】:

先看看你电脑上的man 7 re_format有没有“增强功能” 列出\< 等的部分。 如果是,请在less-451/pattern.h 中更改一行:

#define REGCOMP_FLAG  REG_ENHANCED  // not REG_EXTENDED

那么./configure --with-regex=posix; make less会理解\<

这适用于 Macosx 10.8;在其他系统上,请尝试关注/usr/include/regex.h
(Gnu.org 有十几个 Regular-expression-syntaxes ?! )

【讨论】:

    【解决方案4】:

    less 通常使用vi 语法,即\<\>,除非它已经使用--with-regex=none 配置选项进行编译,或者如果在编译时找到的正则表达式库不提供字边界搜索.您的系统也可能提供不同的语法。

    【讨论】:

    • 答案已更新,您应该说明您使用的是什么操作系统,因为行为取决于平台。
    猜你喜欢
    • 1970-01-01
    • 2021-01-03
    • 2012-07-27
    • 1970-01-01
    • 2021-09-10
    • 1970-01-01
    • 1970-01-01
    • 2015-10-04
    相关资源
    最近更新 更多