Como encontrar um switch específico na página man

16

Suponha que eu queira saber o uso da opção -i no comando grep sem rolagem. 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 .

    
por Mohammad Reza Rezwani 11.05.2014 / 14:14

10 respostas

13

Experimente este comando simples sed ,

$ 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->|

Ele imprimirá a linha que contém o padrão de pesquisa junto com as duas linhas que apresentam logo abaixo da linha do padrão de pesquisa.

OR

Você pode simplesmente fornecer apenas as sinalizações no patten 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 esse 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
}
    
por Avinash Raj 11.05.2014 / 14:20
21

Digite o comando abaixo no terminal:

man grep

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

    
por girardengo 11.05.2014 / 14:34
8

Embora a abordagem mais simples seja pesquisar com / como sugerido por @girardengo, você também pode usar grep em vez de sed , que 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.)

O -A N significa "Imprima N linhas após a correspondência. Apenas um truque para obter as próximas linhas, semelhante ao Avinash's sed approach.

    
por terdon 11.05.2014 / 15:03
3

Você pode usar a função de pesquisa dentro de man , apenas pressione "s" , digite a chave que você está procurando, (-i no seu caso) e pressione intro.

    
por animaletdesequia 11.05.2014 / 14:19
3

Ou, você pode deixar este site pesquisar por você:

link

Você precisa alternar entre usar o terminal e o navegador por algum tempo, mas também também .

    
por Tom 14.05.2014 / 01:14
2

O método mais eficiente que conheço é procurar na página de manual por -i (este site parece não 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 está procurando. Quase sempre funciona na minha experiência, e você pode mudar para alguma variante dele em casos onde não funciona.

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

    
por Harold R. Eason 11.05.2014 / 21:32
1

Por meio de todas as respostas, tudo bem, mas acho que você está se concentrando em apenas uma documentação, não em todos. Por exemplo, para encontrar a opção -i da documentação do 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, não é mais profundo do que isso, mas tem -i , -y , --ignore-case nas primeiras 25 linhas, algo razoável que você não precisa rolar todo o caminho.

Esta solução é mais flexível e também permite pesquisar 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

(tive que usar --ignore-case ao invés de -i , pois era muito comum, mas você pode apenas processar a saída para info 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 apenas aba percorrer a maior parte das páginas de informação.

    
por Braiam 12.05.2014 / 06:46
1

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

man grep | perl -00 -ne 'print if / -i/'
    
por choroba 08.03.2016 / 18:17
1

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

/\s{3,}-i

ou

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

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

    
por Sergio 23.04.2018 / 23:17
0

Como less é usado por padrão como o pager para man , você pode usar a variável de ambiente LESS para passar um padrão para pesquisar quando less abrir a página. Isto é idêntico a fazer, e. man ls e, em seguida, pesquisando a opção --all ou -a , digitando / e, em seguida, inserindo o padrão, e. --all ou -a .

Tudo isso pode ser feito por:

LESS='+/--all' man ls

Ou

LESS='+/-a' man ls

Insira o que você deseja pesquisar após / .

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

    
por heemayl 26.07.2016 / 18:00