Como passar um padrão de pesquisa começando com $ para menos na linha de comando

3

Eu apenas tentei passar um padrão de pesquisa começando com $ para menos:

less +/'\$l' myfile.pl

e eu tenho

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

Depois de ler o manual, tentei a alternativa -p -option

less -p'\$l' myfile.pl

e obtivemos o mesmo erro.

Então eu descobri que (o espaço após -p )

less -p '\$l' myfile.pl

funciona, por exemplo, abre o arquivo sem mensagem de erro e pula para a primeira ocorrência de $l .

A variante da opção longa --pattern=$l não funciona

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

enquanto o espaço em vez de = funciona

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

Isso é

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

no openSUSE Leap 42.3

Agora a pergunta: isso é um bug?

    
por mararm 16.04.2018 / 16:37

2 respostas

0

Isso é causado por um recurso . De man less :

Some options like -k or -D require a string to follow the option letter. The string for that option is considered to end when a dollar sign ($) is found. For example, you can set two -D options on MS-DOS like this:

LESS="Dn9.1$Ds4.1"

Então você poderia fazer:

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

Para iniciar less , procurando por pattern sem diferenciação de maiúsculas e minúsculas.

--use-backslash pode ser usado para permitir que \ escape desse $ .

Agora, embora faça sentido para a variável $LESS , faz pouco sentido para argumentos para opções na linha de comando. Nisso, pode ser visto como um bug que você pode querer denunciar.

Observe também que o processamento de $ ocorre apenas quando o $ ocorre no mesmo argumento que contém a opção que explica a discrepância entre o -p '\$l' vs -p'\$l' e --pattern '\$l' vs --pattern='\$l' causando confusão e mais justificativa de que isso pode ser visto como um bug.

Note que você também terá problemas para:

less -p' foo'

Em que less procura "foo" em vez de " foo" (use novamente -p ' foo' ). Veja a função scan_option() em options.c na fonte para detalhes.

    
por 16.04.2018 / 17:09
0

De 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.

Precisamos então escapar da barra invertida e do dólar, então

less --use-backslash +'/\\$l' myfile.pl
    
por 16.04.2018 / 17:08