grep la page de manuel d'une commande pour les options coupées

18

Supposons que je veuille connaître l'utilisation de -iswitch in grepcommand sans faire défiler. J'ai besoin des spécifications juste pour cette commande ou du moins voir l'écran le montrer en premier. Alors comment? Comme vous pouvez le dire en général, pas seulement pour grep -i.

Mohammad Reza Rezwani
la source
4
apprendre la recherche à Vim
arsaKasra

Réponses:

14

Essayez cette sedcommande simple ,

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

Explication:

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

        |<-Search pattern->|

Il imprimera la ligne qui contient le motif de recherche ainsi que 2 lignes qui se présentent juste en dessous de la ligne du motif de recherche.

OU

Vous pouvez simplement donner uniquement les drapeaux dans le motif de recherche comme ci-dessous.

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.

Vous pouvez ajouter ce script à votre .bashrc( $HOME/.bashrc) pour un accès rapide:

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

Tapez la commande ci-dessous sur le terminal:

man grep

Tapez ensuite le caractère barre oblique /, et écrivez votre recherche, comme -i, suivi de Enter. Cela positionnera le curseur à la première occurrence de la chaîne de recherche. Appuyez sur pour ndéplacer le curseur sur l'occurrence suivante. Appuyez sur Shift+ pour ndéplacer le curseur sur l'occurrence précédente.

Girardengo
la source
1
Il localisera toutes les -i« s le man greppage.But OP veut que la description en rapport avec le -idrapeau en page de manuel.
Avinash Raj
3
@AvinashRaj non, il vous permettra de parcourir chaque occurrence de -i. C'est exactement ce que souhaite le PO.
terdon
9

Bien que l'approche la plus simple consiste à rechercher avec /comme suggéré par @girardengo, vous pouvez également utiliser à la grepplace de sedce que je trouve plus simple:

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

Cela -A Nsignifie "Imprimer N lignes après la correspondance. Juste une astuce pour obtenir les quelques lignes suivantes, similaire à l' sed approche d' Avinash .

terdon
la source
3

Vous pouvez utiliser la fonction de recherche à l'intérieur man, "s"appuyez simplement sur , tapez la clé que vous recherchez, (-i dans votre cas) et appuyez sur intro.

animaletdesequia
la source
Je tape man grep après que j'appuie sur s après que je vois le fichier journal: après cela je tape -i et ENTER mais je ne vois pas la description Ou il y a quelque chose que je ne sais pas
Mohammad Reza Rezwani
2

La méthode la plus efficace que je connaisse est de rechercher la page de manuel -i(ce site ne semble pas rendre mon code. Ce que je veux dire <space><space><space>-i). C'est 3 espaces (vous aurez peut-être besoin de plus / moins d'espaces) suivis du drapeau que vous recherchez. D'après mon expérience, cela fonctionne presque toujours, et vous pouvez passer à une variante de celui-ci dans les cas où cela ne fonctionne pas.

Cela fonctionne parce que la documentation réelle des indicateurs est généralement en retrait. Cela évite de trouver d'autres mentions du drapeau dans d'autres sections, car il n'y a généralement qu'un seul espace devant eux.

Harold R. Eason
la source
1

À travers toutes les réponses peut être bien, mais je pense que vous vous concentrez uniquement sur un morceau de documentation, pas tous. Par exemple, pour trouver le -icommutateur de la documentation grep:

info grep Invoking Command-line\ Options Matching\ Control

Je vais trouver toutes les informations sur "grep", comment "invoquer" les "options de ligne de commande" spécifiques pour "contrôle correspondant". Malheureusement , il ne va pas plus profond que cela, mais il a -i, -y, --ignore-casedans les 25 lignes firsts, quelque chose de raisonnable que vous n'avez pas à faire défiler tout le chemin vers le bas.

Cette solution est la plus flexible et vous permet également de rechercher toutes les 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

(a dû utiliser --ignore-caseau lieu de -icar c'était trop courant, mais vous pouvez simplement traiter la sortie en info dans tous les cas)

Dans ce cas, vous avez à la fois le nom de la page d'informations et la section exacte. Ah, presque oublié, vous pouvez également tabvous frayer un chemin à travers la plupart des sections des pages d'informations.

Braiam
la source
1

Vous pouvez utiliser Perl et son "mode paragraphe" pour extraire uniquement le paragraphe pertinent:

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

Mon approche préférée pour trouver une option donnée dans une manpage est d'utiliser un regex comme \s{2,}-option. Pour la question en main, vous pouvez le faire man grep, puis taper l'expression régulière:

/\s{3,}-i

ou

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

Cela ne correspondra -ique s'il est suivi de trois espaces ou plus.

sergio
la source
0

Comme lessest utilisé par défaut comme pageur man, vous pouvez utiliser la LESSvariable d'environnement pour passer un modèle à rechercher lors de l' lessouverture de la page. Cela revient à faire par exemple man ls, puis à rechercher l'option --allou -aà taper /puis à saisir le modèle, par exemple --allou -a.

Tout cela peut être fait par:

LESS='+/--all' man ls

Ou

LESS='+/-a' man ls

Saisissez ce que vous souhaitez rechercher /.

Vraisemblablement, cela fonctionne mieux pour les options longues (par exemple --all) par rapport aux options courtes (par exemple -a).

heemayl
la source
0

Si vous souhaitez obtenir greples man <program>résultats d'un motif commençant par un trait d'union, utilisez -- avant le motif que vous spécifiez. Exemple utilisant man find:

man find | grep -- -type

Si vous voulez plus d'informations, par exemple la section entière décrivant une option, essayez d'utiliser 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.

La source

Karel
la source