Search
如何在命令行上將以 $ 開頭的搜尋模式傳遞給 less
我只是嘗試傳遞一個
$
以更少開頭的搜尋模式: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
現在,雖然它對
$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