Search

如何在命令行上將以 $ 開頭的搜尋模式傳遞給 less

  • April 16, 2018

我只是嘗試傳遞一個$以更少開頭的搜尋模式:

less +/'\$l' myfile.pl

我得到了

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

閱讀手冊後,我嘗試了備用-p選項

less -p'\$l' myfile.pl

並得到同樣的錯誤。

然後我發現,(nb 後面的空格-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 上

現在的問題是:這是一個錯誤嗎?

這是由一個特性引起的。來自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獲取詳細資訊。

來自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

引用自:https://unix.stackexchange.com/questions/438117