grep die Manpage eines Befehls für Optionen mit Bindestrich

18

Angenommen, ich möchte die Verwendung des Befehls -iswitch in kennen, grepohne zu scrollen. Ich brauche die Spezifikation nur für diesen Befehl oder sehe zumindest, dass der Bildschirm dies zuerst zeigt. Wie also? Da kann man das generell nicht einfach so sagen grep -i.

Mohammad Reza Rezwani
quelle
4
Suche
arsaKasra

Antworten:

14

Versuchen Sie diesen einfachen sedBefehl,

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

Erläuterung:

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

        |<-Search pattern->|

Es wird die Zeile gedruckt, die das Suchmuster enthält, zusammen mit 2 Zeilen, die direkt unterhalb der Suchmusterzeile angezeigt werden.

ODER

Sie können einfach nur die Flags im Suchmuster wie unten angeben.

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.

Sie können dieses Skript zu Ihrem .bashrc( $HOME/.bashrc) hinzufügen, um schnell darauf zuzugreifen:

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

Geben Sie den folgenden Befehl im Terminal ein:

man grep

Geben Sie dann einen Schrägstrich ein /und schreiben Sie Ihre Suche -i, gefolgt von Enter. Dadurch wird der Cursor beim ersten Auftreten der Suchzeichenfolge positioniert. Drücken von nbewegt den Cursor zum nächsten Vorkommen. Durch Drücken von Shift+ wird nder Cursor zum vorherigen Vorkommen bewegt.

girardengo
quelle
1
Es findet alle Seiten der Seite. Aber OP möchte nur die Beschreibung, die sich auf das Flag in -ider man grepManpage bezieht -i.
Avinash Raj
3
@AvinashRaj nein, es ermöglicht Ihnen, durch jedes Vorkommen von zu wechseln -i. Genau das will das OP.
Terdon
9

Während der einfachste Ansatz darin besteht, /wie von @girardengo vorgeschlagen, mit zu suchen, können Sie auch grepanstelle dessen verwenden, sedwas ich einfacher finde:

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

Das -A Nbedeutet "N Zeilen nach der übereinstimmenden drucken. Nur ein Trick, um die nächsten Zeilen zu erhalten, ähnlich wie bei Avinash sed .

terdon
quelle
3

Sie können die Suchfunktion verwenden. Drücken Sie maneinfach "s", geben Sie die gesuchte Taste ein (-i in Ihrem Fall) und drücken Sie intro.

animaletdesequia
quelle
Ich tippe man grep danach drücke ich s danach sehe ich die Logdatei: danach tippe ich -i und ENTER aber ich sehe die Beschreibung nicht Oder es gibt etwas was ich nicht weiß
Mohammad Reza Rezwani
2

Die effizienteste Methode, die mir bekannt ist, ist das Durchsuchen der Manpage nach -i(Diese Site scheint meinen Code nicht zu rendern. Was ich meine ist <space><space><space>-i). Das sind 3 Leerzeichen (möglicherweise benötigen Sie mehr / weniger Leerzeichen), gefolgt von der Flagge, nach der Sie suchen. Es funktioniert nach meiner Erfahrung fast immer, und Sie können in Fällen, in denen es nicht funktioniert, zu einer Variante davon wechseln.

Dies funktioniert, weil die eigentliche Dokumentation der Flags normalerweise eingerückt ist. Es wird vermieden, andere Erwähnungen der Flagge in anderen Abschnitten zu finden, da normalerweise nur ein Leerzeichen vor ihnen steht.

Harold R. Eason
quelle
1

Alle Antworten mögen in Ordnung sein, aber ich denke, Sie konzentrieren sich nur auf eine Dokumentation, nicht auf alle. So finden Sie beispielsweise den -iSchalter der grep-Dokumentation:

info grep Invoking Command-line\ Options Matching\ Control

Ich werde alle Informationen über "grep" finden, wie man die spezifischen "Befehlszeilenoptionen" für "Matching Control" "aufruft". Leider ist es nicht mehr tiefer als das gehen, aber es hat -i, -y, --ignore-casein den Premieren 25 Zeilen, etwas sinnvoll, dass Sie nicht zu tun haben , alles auf dem Weg zu bewegen.

Diese Lösung ist flexibler und ermöglicht es Ihnen, alle Infoseiten zu durchsuchen:

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

(musste --ignore-casestatt verwenden, -ida es zu häufig war, aber man kann die Ausgabe auf jeden Fall nur zu info verarbeiten)

In diesem Fall haben Sie sowohl den Namen der Infoseite als auch den genauen Abschnitt. Ah, fast vergessen, Sie können sich auch nur tabdurch die meisten Abschnitte der Infoseiten schleichen.

Braiam
quelle
1

Sie können Perl und seinen "Absatzmodus" verwenden, um nur den relevanten Absatz zu extrahieren:

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

Mein bevorzugter Ansatz, um eine bestimmte Option auf einer manSeite zu finden, ist die Verwendung eines regulären Ausdrucks wie \s{2,}-option. Für man grepdie vorliegende Frage können Sie den regulären Ausdruck ausführen und dann eingeben:

/\s{3,}-i

oder

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

Dies wird -inur dann zutreffen, wenn drei oder mehr Leerzeichen folgen.

sergio
quelle
0

Da lessstandardmäßig der Pager für verwendet wird man, können Sie die LESSUmgebungsvariable verwenden, um ein Muster zu übergeben, nach dem gesucht werden soll, wenn lessdie Seite geöffnet wird. Dies ist identisch, wenn Sie z . B. man lsnach der Option suchen --alloder das Muster -aeingeben /, z . B. --alloder -a.

All dies kann erfolgen durch:

LESS='+/--all' man ls

Oder

LESS='+/-a' man ls

Geben Sie ein, wonach Sie suchen möchten /.

Vermutlich funktioniert dies am besten für die langen Optionen (z. B. --all) im Vergleich zu den kurzen Optionen (z. B. -a).

heemayl
quelle
0

Wenn Sie grepdie man <program>Ergebnisse für ein Muster anzeigen möchten, das mit einem Bindestrich beginnt, verwenden Sie -- vor dem angegebenen Muster. Beispiel mit man find:

man find | grep -- -type

Wenn Sie weitere Informationen benötigen, z. B. den gesamten Abschnitt, in dem eine Option beschrieben wird, versuchen Sie Folgendes 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.

Quelle

karel
quelle