grep a página de manual de um comando para opções hifenizadas

18

Suponha que eu queira saber o uso da -iopção de grepcomando sem rolar. Eu preciso da especificação apenas para esse comando ou, pelo menos, ver a tela mostrar isso primeiro. Então como? Como você pode dizer que, em geral, não apenas para grep -i.

Mohammad Reza Rezwani
fonte
4
aprender pesquisar no Vim
arsaKasra

Respostas:

14

Tente este sedcomando simples ,

$ man grep | sed -n '/-i, --ignore-case/,+2p'
    -i, --ignore-case
              Ignore  case  distinctions  in  both  the  PATTERN and the input
              files.  (-i is specified by POSIX.)

Explicação:

sed -n '/-i, --ignore-case/,+2p'

        |<-Search pattern->|

Irá imprimir a linha que contém o padrão de pesquisa juntamente com 2 linhas que se apresentam logo abaixo da linha do padrão de pesquisa.

OU

Você pode simplesmente dar apenas as bandeiras no padrão de pesquisa, como abaixo.

avinash@avinash-Lenovo-IdeaPad-Z500:~$ man grep | sed -n '/ *i, -/,+3p'
       -i, --ignore-case
              Ignore  case  distinctions  in  both  the  PATTERN and the input
              files.  (-i is specified by POSIX.)

avinash@avinash-Lenovo-IdeaPad-Z500:~$ man grep | sed -n '/ *V, -/,+3p'
       -V, --version
              Print  the version number of grep to the standard output stream.
              This version number should be included in all bug  reports  (see
              below).
avinash@avinash-Lenovo-IdeaPad-Z500:~$ man grep | sed -n '/ *F, -/,+3p'
       -F, --fixed-strings
              Interpret PATTERN as a  list  of  fixed  strings,  separated  by
              newlines,  any  of  which is to be matched.  (-F is specified by
              POSIX.)
avinash@avinash-Lenovo-IdeaPad-Z500:~$ man grep | sed -n '/ *G, -/,+3p'
       -G, --basic-regexp
              Interpret PATTERN  as  a  basic  regular  expression  (BRE,  see
              below).  This is the default.

Você pode adicionar este script ao seu .bashrc( $HOME/.bashrc) para acesso rápido:

mangrep(){
    USAGE="mangrep <application> <switch>"
    if [[ "$#" -ne "2" ]]
      then
          echo "Usage: $USAGE"
      else
          man "$1" | sed -n "/ *"$2", -/,+3p"
    fi
}
Avinash Raj
fonte
23

Digite o comando abaixo no terminal:

man grep

Em seguida, digite o caractere de barra /, e escreva sua pesquisa, como -i, seguida de Enter. Isso posicionará o cursor na primeira ocorrência da sequência de pesquisa. Pressionar nmove o cursor para a próxima ocorrência. Pressionar Shift+ nmove o cursor para a ocorrência anterior.

girardengo
fonte
11
Ele irá localizar todos os -ié o man greppage.But OP quer apenas a descrição relacionada com a -ibandeira na página homem.
Avinash Raj
3
@AvinashRaj não, ele permitirá que você percorra cada ocorrência de -i. É exatamente isso que o OP quer.
terdon
9

Embora a abordagem mais simples seja pesquisar /conforme sugerido pelo @girardengo, você também pode usar em grepvez do sedque eu acho mais simples:

$ man grep | grep -A 1 '^ *-i'
   -i, --ignore-case
          Ignore  case  distinctions  in  both  the  PATTERN and the input
          files.  (-i is specified by POSIX.)

Os -A Nmeios "Imprima N linhas após a correspondência. Apenas um truque para obter as próximas linhas, semelhante à abordagem de Avinash sed .

Terdon
fonte
3

Você pode usar a função de pesquisa dentro man, basta "s"pressionar, digitar a tecla que está procurando (-i no seu caso) e pressionar introdução.

animaletdesequia
fonte
Eu digitar man grep depois que eu imprensa é depois que eu ver arquivo de log: depois que eu digito -i e entrar, mas eu não vejo a descrição ou há somthing que eu não sei
Mohammad Reza Rezwani
2

O método mais eficiente de que conheço é pesquisar na página de manual -i(este site parece falhar ao renderizar meu código. O que quero dizer é <space><space><space>-i). São 3 espaços (talvez você precise de mais / menos espaços) seguidos pela bandeira que você está procurando. Quase sempre funciona na minha experiência, e você pode mudar para alguma variante nos casos em que não funciona.

Funciona porque a documentação real dos sinalizadores é tipicamente recuada. Evita encontrar outras menções da bandeira em outras seções, porque geralmente há apenas um espaço antes delas.

Harold R. Eason
fonte
1

Através de todas as respostas pode ser bom, mas acho que você está se concentrando apenas em uma parte da documentação, não em todas. Por exemplo, para encontrar o -iswitch da documentação grep:

info grep Invoking Command-line\ Options Matching\ Control

Encontrarei todas as informações sobre "grep", como "invocar" as "opções de linha de comando" específicas para "controle de correspondência". Infelizmente ele não vai mais profundo do que isso, mas tem -i, -y, --ignore-casenas estreias 25 linhas, algo razoável que você não tem que percorrer todo o caminho para baixo.

Esta solução é a mais flexível e também permite que você pesquise todos os infopages:

info --apropos=--ignore-case
"(coreutils)join invocation" -- --ignore-case <1>
"(coreutils)uniq invocation" -- --ignore-case <2>
"(coreutils)sort invocation" -- --ignore-case
"(gettext)msggrep Invocation" -- --ignore-case, ‘msggrep’ option
"(grep)Matching Control" -- --ignore-case

(teve que usar em --ignore-casevez de -ijá que era muito comum, mas você pode simplesmente processar a saída para informações em qualquer caso)

Nesse caso, você tem o nome da página de informações e a seção exata. Ah, quase esqueci, você também pode tabseguir a maioria das seções das páginas de informações.

Braiam
fonte
1

Você pode usar Perl e seu "modo de parágrafo" para extrair apenas o parágrafo relevante:

man grep | perl -00 -ne 'print if / -i/'
choroba
fonte
1

Minha abordagem favorita para encontrar uma determinada opção em uma manpágina é usar um regex como \s{2,}-option. Para a pergunta em questão, você pode fazer man grepe digitar a regex:

/\s{3,}-i

ou

/ {3,}-i
 ^------------- space here

Isso corresponderá -iapenas quando seguido por três ou mais espaços.

sergio
fonte
0

Como lessé usado por padrão como o pager man, você pode usar a LESSvariável de ambiente para transmitir um padrão a ser pesquisado quando lessabrir a página. Isso é idêntico a fazer, por exemplo man ls, pesquisar a opção --allou -adigitar /e inserir o padrão, por exemplo, --allou -a.

Tudo isso pode ser feito por:

LESS='+/--all' man ls

Ou

LESS='+/-a' man ls

Insira o que deseja pesquisar /.

Presumivelmente, isso funciona melhor para as opções longas (por exemplo --all) em comparação com as opções curtas (por exemplo -a).

heemail
fonte
0

Se você deseja obter grepos man <program>resultados para um padrão que começa com um hífen, use -- antes do padrão especificado. Exemplo usando man find:

man find | grep -- -type

Se você quiser obter mais informações, por exemplo, a seção inteira que descreve uma opção, tente usar sed:

$ man find | sed -n '/-mindepth/,/^$/p'
   -mindepth levels
          Do  not apply any tests or actions at levels less than levels (a
          non-negative integer).  -mindepth  1  means  process  all  files
          except the command line arguments.

Fonte

karel
fonte