Come trovare switch specifici nella pagina man

Supponiamo di voler conoscere l’uso di -i switch nel comando grep senza scorrere. Ho bisogno delle specifiche solo per quel comando o almeno vedere prima la schermata. Così come? Come puoi dire in generale non solo per grep -i .

Prova questo semplice comando 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.) 

Spiegazione:

 sed -n '/-i, --ignore-case/,+2p' |<-Search pattern->| 

Stamperà 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 di seguito.

 [email protected]:~$ 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.) [email protected]:~$ 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). [email protected]:~$ 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.) [email protected]:~$ 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 accesso rapido:

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

Digita il comando seguente sul terminale:

 man grep 

Quindi digita carattere barra, / , e scrivi la tua ricerca, come -i , seguito da Invio . Questo posizionerà il cursore alla prima occorrenza della stringa di ricerca. Premendo n si sposta il cursore sull’occorrenza successiva. Premendo MAIUSC + N si sposta il cursore sull’occorrenza precedente.

Mentre l’approccio più semplice è quello di cercare con / come suggerito da @girardengo, puoi anche usare grep invece di sed che 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.) 

L’ -AN significa “Stampa N righe dopo quella corrispondente. Solo un trucco per ottenere le linee successive, simile all’avvio di Avinash .

Puoi usare la funzione di ricerca all’interno di man , solo pres "s" , digita la chiave che stai cercando, (-i nel tuo caso) e premi introduzione.

Oppure puoi lasciare che questo sito ti stia cercando:

http://explainshell.com/explain?cmd=grep+-i

Devi passare dall’uso del terminale a un browser per un po ‘, ma ci sono modi per aggirare anche questo.

Il metodo più efficiente di cui sono a conoscenza è la ricerca nella pagina man di -i (Questo sito sembra non riuscire a eseguire il rendering del mio codice. Quello che intendo è -i ). Ecco 3 spazi (potresti aver bisogno di più / meno spazi) seguiti dalla bandiera che stai cercando. Funziona quasi sempre nella mia esperienza e puoi modificarne alcune varianti nei casi in cui non funzioni.

Funziona perché la documentazione effettiva dei flag è in genere rientrata. Evita di trovare altre menzioni della bandiera in altre sezioni, perché di solito c’è solo uno spazio davanti a loro.

Attraverso tutte le risposte potrebbe andare bene, ma penso che tu ti stia concentrando solo su un pezzo di documentazione, non su tutto. Ad esempio, per trovare l’ -i della documentazione di grep:

 info grep Invoking Command-line\ Options Matching\ Control 

Troverò tutte le informazioni su “grep”, su come “richiamare” le specifiche “opzioni della riga di comando” per “controllo di corrispondenza”. Purtroppo non va più in profondità, ma ha -i , -y , --ignore-case nelle prime 25 righe, qualcosa di ragionevole che non devi scorrere fino in fondo.

Questa soluzione è la più flessibile e consente anche di cercare tutte le infopage:

 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 

( --ignore-case usare --ignore-case invece di -i dato che era troppo comune, ma puoi comunque elaborare l’output in qualsiasi caso)

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

Puoi usare Perl e la sua “modalità paragrafo” per estrarre solo il paragrafo pertinente:

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

Il mio approccio preferito per trovare una determinata opzione in una pagina man è di usare una espressione regolare come \s{2,}-option . Per la domanda in mano, puoi fare man grep e quindi digitare regex:

 /\s{3,}-i 

o

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

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

Poiché per impostazione predefinita viene utilizzato less come cercapersone per man , è ansible utilizzare la variabile di ambiente LESS per passare un pattern da cercare quando less apre la pagina. Questo è identico a fare ad esempio man ls e quindi cercare l’opzione --all o -a digitando / e quindi inserendo il modello es. --all o -a .

Tutto ciò può essere fatto da:

 LESS='+/--all' man ls 

O

 LESS='+/-a' man ls 

Immettere ciò che si desidera cercare dopo / .

Presumibilmente questo funziona meglio per le opzioni lunghe (ad esempio – tutte) rispetto a quelle brevi (ad esempio -a ).