如何在命令行上将以 $ 开头的搜索模式传递​​给 less

如何在命令行上将以 $ 开头的搜索模式传递​​给 less

$我只是尝试传递以less开头的搜索模式:

less +/'\$l' myfile.pl

我得到了

There is no -l option ("less --help" for help)

阅读手册后,我尝试了替代-p选项

less -p'\$l' myfile.pl

并得到同样的错误。

然后我发现,(注意后面的空格-p

less -p '\$l' myfile.pl

有效,即打开文件时没有错误消息并跳转到第一次出现$l.

长选项变体--pattern=$l不起作用

less --pattern='\$l' myfile.pl
There is no -l option ("less --help" for help)

而空间而不是=作品

less --pattern '\$l' myfile.pl

这是

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

在 openSUSE Leap 42.3 上

现在的问题是:这是一个错误吗?

答案1

man less

   --use-backslash
          This option changes the interpretations of options which  follow
          this one.  After the --use-backslash option, any backslash in an
          option string is removed and the following  character  is  taken
          literally.   This  allows a dollar sign to be included in option
          strings.

然后我们需要转义反斜杠和美元,所以

less --use-backslash +'/\\\$l' myfile.pl

答案2

这是由一个特征。从man less

某些选项(例如 -k 或 -D)需要在选项字母后跟一个字符串。当找到美元符号 ($) 时,该选项的字符串被视为结束。例如,您可以在 MS-DOS 上设置两个 -D 选项,如下所示:

LESS="Dn9.1$Ds4.1"

所以你可以这样做:

LESS='ppattern$i' PAGER=less man less

首先,不区分大小写地less查找。pattern

--use-backslash可以用来\逃避$

现在,虽然它对于变量有意义$LESS,但对于命令行上选项的参数却没有什么意义。在这种情况下,它可能被视为您可能想要报告的错误。

另请注意,$仅当该处理 发生在与包含解释您的vs和vs$之间的差异的选项相同的参数中时,才会进行处理,从而导致混乱并更有理由认为它可能被视为错误。-p '\$l'-p'\$l'--pattern '\$l'--pattern='\$l'

请注意,您还会遇到以下问题:

less -p' foo'

在哪里less寻找"foo"替代" foo"(再次使用-p ' foo'替代)。查看源代码scan_option()中的函数以了解详细信息。options.c

相关内容