grep la pagina man di un comando per le opzioni sillabate


18

Supponiamo che io voglia conoscere l'uso di -iswitch in grepcommand senza scorrere. Ho bisogno delle specifiche solo per quel comando o almeno per prima cosa lo schermo lo mostra. Così come? Come puoi dire in generale non solo per grep -i.


4

Risposte:


14

Prova questo semplice sedcomando,

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

Spiegazione:

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

        |<-Search pattern->|

Stampa la linea che contiene il modello di ricerca insieme a 2 linee che si presentano appena sotto alla linea del modello di ricerca.

O

Puoi semplicemente dare solo le bandiere nel patten di ricerca come sotto.

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.

Puoi aggiungere questo script al tuo .bashrc( $HOME/.bashrc) per un rapido accesso:

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

23

Digitare il comando seguente sul terminale:

man grep

Digita quindi il carattere barra /e scrivi la tua ricerca, come -i, seguita da Enter. Ciò posizionerà il cursore alla prima occorrenza della stringa di ricerca. Premendo si nsposta il cursore sulla ricorrenza successiva. Premendo Shift+ si nsposta il cursore sulla ricorrenza precedente.


1
Individuerà tutta la -ipagina, man grepma OP vuole solo la descrizione relativa al -iflag nella pagina man.
Avinash Raj,

3
@AvinashRaj no, ti permetterà di scorrere ogni ricorrenza di -i. Questo è esattamente ciò che l'OP vuole.
terdon,

9

Mentre l'approccio più semplice è cercare con /come suggerito da @girardengo, puoi anche usare al grepposto del sedquale trovo più semplice:

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

I -A Nmezzi "Stampa N righe dopo l'abbinamento uno. Solo un trucco per ottenere le prossime righe, simili a di Avinash sed approccio.


3

Puoi usare la funzione di ricerca all'interno man, basta "s"premere, digitare il tasto che stai cercando (-i nel tuo caso) e premere intro.


Scrivo man grep dopo che premo s dopo che vedo il file di registro: dopo
digito


2

Il metodo più efficiente di cui sono a conoscenza è la ricerca nella pagina man per -i(Questo sito sembra non riuscire a rendere il mio codice. Quello che voglio dire è<space><space><space>-i ). Sono 3 spazi (potresti aver bisogno di più / meno spazi) seguiti dalla bandiera che stai cercando. Funziona quasi sempre nella mia esperienza, e puoi cambiarne una variante nei casi in cui non funziona.

Funziona perché la documentazione effettiva delle bandiere è tipicamente rientrata. Evita di trovare altre menzioni della bandiera in altre sezioni, perché di solito c'è solo uno spazio prima di esse.


1

Attraverso tutte le risposte può andare bene, ma penso che ti stai concentrando solo su un pezzo di documentazione, non su tutti. Ad esempio, per trovare il -icambio della documentazione grep:

info grep Invoking Command-line\ Options Matching\ Control

Troverò tutte le informazioni su "grep", come "invocare" le specifiche "opzioni della riga di comando" per "controllo di corrispondenza". Purtroppo non va più profondo di quello, ma ha -i, -y, --ignore-casenei i primi 25 righe, qualcosa di ragionevole che non c'è bisogno di scorrere tutta la tua strada verso il basso.

Questa soluzione è più flessibile e ti consente anche di cercare in tutte le informazioni:

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

(è stato necessario utilizzarlo --ignore-caseanziché -iperché era troppo comune, ma è possibile elaborare l'output in informazioni in ogni caso)

In questo caso, hai sia il nome della pagina informativa sia la sezione esatta. Ah, quasi dimenticato, puoi anche tabpassare attraverso la maggior parte della sezione delle pagine di informazioni.


1

Puoi usare Perl e la sua "modalità paragrafo" per estrarre solo il paragrafo rilevante:

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

1

Il mio approccio preferito per trovare una determinata opzione in una manpagina è usare una regex come \s{2,}-option. Per la domanda in corso, puoi fare man grepe quindi digitare regex:

/\s{3,}-i

o

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

Questo corrisponderà -isolo se seguito da tre o più spazi.


0

Come lessviene utilizzato per impostazione predefinita come cercapersone man, è possibile utilizzare la LESSvariabile di ambiente per passare un modello da cercare quando lessapre la pagina. Questo è identico a fare ad esempio man lse quindi cercare l'opzione --allo -adigitando /e quindi inserendo il modello ad esempio --allo -a.

Tutto ciò può essere fatto da:

LESS='+/--all' man ls

O

LESS='+/-a' man ls

Inserisci ciò che desideri cercare / .

Presumibilmente funziona meglio per le opzioni lunghe (ad es. --all) Rispetto a quelle corte (ad es -a.).


0

Se si desidera ottenere grepi man <program>risultati per un motivo che inizia con un trattino, utilizzare -- prima del motivo specificato. Esempio usando man find:

man find | grep -- -type

Se vuoi maggiori informazioni, ad esempio l'intera sezione che descrive un'opzione, prova a usare 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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.