grep die Manpage eines Befehls für Optionen mit Bindestrich

8

Wenn ich die Manpage des findBefehls nach Übereinstimmungen typedurchsuche, werden viele Suchergebnisse zurückgegeben, die ich nicht möchte. Stattdessen möchte ich einen Befehl verwenden, der nur die Suchergebnisse für zurückgibt -type.

Der Befehl man find | grep -typefunktioniert nicht. Es gibt zurück:

grep: invalid option -- 't'
Karel
quelle
1
Möchten Sie nur die einzelnen Zeilen der formatierten Manpage, die die Zeichenfolge enthalten -type, oder möchten Sie beispielsweise den gesamten oder zwei Absätze, in denen beschrieben wird, was -typefunktioniert?
Mark Plotnick
Ich möchte wissen, wie es in beide Richtungen geht. Das Greifen nach den einzelnen Zeilen, die die Zeichenfolge enthalten, -typewürde für die Art und Weise, wie ich normalerweise die Manpages durchsuche, ausreichen. Es -typewäre jedoch sehr nützlich, den gesamten oder zwei Absätze zurückzugeben, in denen beschrieben wird, was zu tun ist mindestens einmal.
Karel
Übrigens, wenn das Anzeigen einer Webseite eine Alternative ist, hat Idan Kamara von EXPLAINSHELL.com die Teile der Manpages, die Befehlsoptionen beschreiben, hervorragend extrahiert. Siehe zum Beispiel explainshell.com/explain?cmd=find+-type+f zu sehen, was die -typeOption der Fall ist.
Mark Plotnick

Antworten:

10

Wenn Sie nach einem Muster suchen möchten, das mit einem Bindestrich beginnt, verwenden Sie es --vor dem von Ihnen angegebenen Muster.

man find | grep -- -type

Wenn Sie weitere Informationen wünschen, zum Beispiel der gesamte Abschnitt eine Option beschreibt, Sie könnten mit Sed versuchen:

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

Dies funktioniert jedoch nicht für jede Option, nach der Sie suchen. Zum Beispiel:

$ man find | sed -n '/^[[:space:]]*-type/,/^$/p'
   -type c
          File is of type c:

Nicht sehr hilfreich. Schlimmer noch, bei einigen Optionen könnten Sie in die Irre geführt werden, als würden Sie den gesamten Text über die Option lesen, wenn Sie dies wirklich nicht getan hätten. Bei der Suche wird beispielsweise -deletedie sehr wichtige WARNUNG weggelassen, die als zweiter Absatz unter dieser Überschrift enthalten ist.


Meine Empfehlung ist, einen Standardaufruf manmit der eingestellten LESSUmgebungsvariablen zu verwenden. Ich benutze es ziemlich häufig in meinen Antworten auf dieser Seite.

LESS='+/^[[:space:]]*-type' man find

Weitere Informationen zur Funktionsweise finden Sie unter:

LESS='+/^[[:space:]]*LESS ' man less
LESS='+/\+cmd' man less
LESS='+/\/' man less

Wenn Sie die Option nur schnell und interaktiv in der Manpage finden möchten, lernen Sie die lessSuchfunktionen kennen. Und siehe auch:

Platzhalter
quelle
Vielen Dank für die Veröffentlichung. Die Befehle in Ihrer Antwort haben die Ergebnisse zurückgegeben, nach denen ich gesucht habe. Ich werde nach ein oder zwei Tagen eine Antwort annehmen, bitte haben Sie etwas Geduld.
Karel
@ Karel, kein Problem, ich bin sehr geduldig. :) Ein wenig verwirrt: Ich weiß, dass Sie zwei Tage lang kein Kopfgeld für eine Frage geben können, aber ich glaube, dass das Zeitlimit, bevor Sie eine Antwort akzeptieren können, nur etwa 15 Minuten beträgt.
Wildcard
man find | sed -n '/-type/,/^$/p'gibt viel mehr als das, was Sie auf dem Laufenden , wie es passen wird -typeüberall in der Linie ... auf kleines Skript arbeite ich Mann oder Hilfe (für builtin) zu suchen und zur Zeit awknoch einige Macken .. zu lösen hat , awk -v RS= -v rx="^\\\s*$arg\\\>" '$0 ~ rx' "$file"wo argwäre -typein diesem Fall
Sundeep
2
Übrigens, @Sundeep, möchten Sie möglicherweise versuchen, die zugrunde liegenden troffDateien, die die ursprünglichen Manpage-Informationen enthalten , mit Formatinformationen anstelle der Textausgabe des manBefehls zu analysieren .
Wildcard
1
@Sundeep, hier ist der Ausgangspunkt für dich . (Folgen Sie unbedingt dem Link in dieser Antwort.) Es gibt viel zu wissen troff. Pingen Sie mich im Chat an, wenn Sie mit dem Tauchen im Kaninchenbau fertig sind. :)
Wildcard
1

Oder leiten Sie lesseinen Suchbegriff weiter und geben Sie ihn ein:

man 1 find | less -p ' -type'

(Dies kann fehlschlagen, je nachdem, was genau eingezogen lesswird, z. B. wenn -typeBackspaces fett gedruckt wurden.)

Thrig
quelle
Pipe es col -bxzuerst durch .
Wildcard