Supposons que je veuille connaître l'utilisation du commutateur -i
dans la commande grep
sans défilement. J'ai besoin de la spécification juste pour cette commande ou au moins, je vois l'écran montrer ceci en premier. Alors comment? Comme vous pouvez le dire en général, pas seulement pour grep -i
.
Essayez cette simple commande 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.)
Explication:
sed -n '/-i, --ignore-case/,+2p'
|<-Search pattern->|
Il imprimera la ligne contenant le motif de recherche ainsi que 2 lignes qui se trouvent juste en dessous de la ligne du motif de recherche.
OR
Vous pouvez simplement donner uniquement les drapeaux dans le champ 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
}
Tapez la commande ci-dessous sur le terminal:
man grep
Puis tapez slash character, /et écrivez votre recherche, comme -i
, suivie de Enter. Cela positionnera le curseur à la première occurrence de la chaîne de recherche. Pressage n déplace le curseur sur l'occurrence suivante. Pressage Shift+n déplace le curseur sur l'occurrence précédente.
Bien que l’approche la plus simple consiste à rechercher avec / comme suggéré par @girardengo, vous pouvez également utiliser grep
au lieu de sed
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.)
Le -A N
signifie "Imprimez N lignes après la correspondance. Juste une astuce pour obtenir les prochaines lignes, similaire à l'approche d'Avinashsed
.
Ou, vous pouvez laisser ce site faire la recherche pour vous:
http://explainshell.com/explain?cmd=grep+-i
Vous devez passer du navigateur à l’utilisation du terminal pour un moment, mais il ya aussi des moyens de contourner ce problème .
Vous pouvez utiliser la fonction de recherche à l'intérieur de man
, il vous suffit d'appuyer sur "s"
, de taper la clé que vous recherchez, (-i dans votre cas) et d'appuyer sur intro.
La méthode la plus efficace que je connaisse consiste à effectuer une recherche dans la page de manuel pour -i
(Ce site semble ne pas pouvoir restituer mon code. Ce que je veux dire, c'est <space><space><space>-i
). C'est 3 espaces (vous aurez peut-être besoin de plus/moins d'espaces) suivis du drapeau que vous recherchez. Selon mon expérience, cela fonctionne presque toujours, et vous pouvez en changer dans les cas où cela ne fonctionnerait pas.
Cela fonctionne parce que la documentation des drapeaux est généralement indentée. Cela évite de trouver d'autres mentions du drapeau dans d'autres sections, car il n'y a généralement qu'un espace devant elles.
Mon approche préférée pour trouver une option donnée dans une page man
consiste à utiliser une expression rationnelle telle que \s{2,}-option
. Pour la question en question, vous pouvez faire man grep
puis taper la regex:
/\s{3,}-i
ou
/ {3,}-i
^------------- space here
Ceci ne correspond à -i
que s'il est suivi d'au moins trois espaces.
Vous pouvez utiliser Perl et son "mode paragraphe" pour extraire uniquement le paragraphe pertinent:
man grep | Perl -00 -ne 'print if / -i/'
Toutes les réponses peuvent être bonnes, mais je pense que vous ne vous concentrez que sur une partie de la documentation, pas sur toutes. Par exemple, pour trouver le commutateur -i
de la documentation de grep:
info grep Invoking Command-line\ Options Matching\ Control
Je vais trouver toutes les informations sur "grep", comment "appeler" les "options de ligne de commande" spécifiques pour "contrôle correspondant". Malheureusement, cela ne va pas plus loin que cela, mais il y a -i
, -y
, --ignore-case
dans les 25 premières lignes, ce qui est raisonnable, vous n'avez pas à faire défiler tout votre 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
(Doit utiliser --ignore-case
au lieu de -i
car il était trop commun, 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’information et la section exacte. Ah, presque oublié, vous pouvez aussi juste tab votre chemin à travers la plupart des sections des pages d’informations.
Si vous voulez grep
le man <program>
pour 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 souhaitez plus d'informations, par exemple l'intégralité de la section 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.
Comme less
est utilisé par défaut comme pageur pour man
, vous pouvez utiliser la variable d'environnement LESS
pour transmettre un modèle à rechercher lorsque less
ouvre la page. Ceci est identique à faire par exemple man ls
, puis en recherchant l'option --all
ou -a
en tapant / puis entrer le motif, par ex. --all
ou -a
.
Tout cela peut être fait par:
LESS='+/--all' man ls
Ou
LESS='+/-a' man ls
Entrez ce que vous voulez rechercher après /
.
Cela fonctionne probablement mieux pour les options longues (par exemple --all
) que pour les options courtes (par exemple -a
).