Wie suche ich nach allen Man-Dateien, die ein bestimmtes Schlüsselwort enthalten?

8

Ich möchte lernen, wie man nach einer Datei sucht, indem ich den Inhalt darin als Parameter gebe. Ich kann die Lösung dann anwenden, um nach Befehlen von Richard Stallman zu suchen (über Manpages).

juggernauthk108
quelle
1
Die Antwort unten ist perfekt für das, was Sie im Titel fragen. Beachten Sie jedoch, dass das Durchsuchen komprimierter manSeiten nicht mit dem Durchsuchen von Text- / Binärdateien identisch ist (für diejenigen, die die regulären verwenden möchten grep).
Kos
@kos guter Punkt. Ich habe versucht, die Frage zu bearbeiten, um "Mann" hinzuzufügen, aber sie unterschreitet die Grenze, also lasse ich sie los;)
philsf
@philsf Nach der Inkonsistenz in der Frage zu urteilen, nahmen sie anscheinend an, dass es so oder so dasselbe sein würde; Sie könnten zIhrer Antwort trotzdem "Entfernen Sie die für nicht gzip-komprimierte Dateien" hinzufügen ;)
kos
1
Nur Manpages oder Dateien im Allgemeinen?
Muru
Eigentlich beides ... Ich wollte alle Befehle von Stallman kennenlernen. Ich kann die Lösung natürlich auch für allgemeine Dateien verwenden
juggernauthk108

Antworten:

11

Dieser Befehl zeigt Ihnen die Dateinamen von Man-Dateien an, die das Schlüsselwort enthalten Stallman:

zgrep -l Stallman /usr/share/man/man?/*

Die Ausgabe in meinem 15.10 beginnt mit:

/usr/share/man/man1/cat.1.gz
/usr/share/man/man1/comm.1.gz
/usr/share/man/man1/ctags.1.gz
/usr/share/man/man1/ctags.emacs24.1.gz

Dann können Sie wie gewohnt sehen, mit man cat, man commetc.

philsf
quelle
10

Von man man:

-K, --global-apropos
      Search for text in all manual  pages.   This  is  a  brute-force
      search,  and is likely to take some time; if you can, you should
      specify a section to reduce the number of pages that need to  be
      searched.   Search terms may be simple strings (the default), or
      regular expressions if the --regex option is used.

-w, --where, --location
      Don't actually display  the  manual  pages,  but  do  print  the
      location(s) of the source nroff files that would be formatted.

Kombiniert:

man -wK 'Richard M Stllman'

Obwohl Manpages normalerweise nur Richard Stallmaneinen variablen Abstand zwischen den beiden Wörtern haben, kann ein regulärer Ausdruck angebracht sein:

--regex
      Show all pages with any part of  either  their  names  or  their
      descriptions   matching   each   page   argument  as  a  regular
      expression, as with  apropos(1).   Since  there  is  usually  no
      reasonable  way  to  pick  a  "best"  page  when searching for a
      regular expression, this option implies -a.

Damit:

man --regex -wK 'Richard *Stallman' 
muru
quelle
Diese Lösung verwendet nur das vorgesehene Werkzeug ( man) und ist daher viel eleganter als meine. Diese Antwort sollte akzeptiert werden.
Philsf
3

Diese Methode durchsucht nicht die gesamten Manpages nach einem Schlüsselwort, sondern nur den Titel und die Kurzbeschreibung jeder Manpage. In Ihrem Fall reicht es nicht aus, aber es ist nützlich, schnell etwas nachzuschlagen. Wenn es nicht die gewünschten Ergebnisse nicht zurückgibt, müssen Sie @ verwenden philsf ‚s Antwort .

Mit dem aproposBefehl können Sie schnell den Titel und die Beschreibung aller installierten Manpages nach einem Schlüsselwort durchsuchen:

$ apropos chat
chat (8)             - Automated conversational script with a modem
chattr (1)           - change file attributes on a Linux file system
empathy (1)          - GNOME multi-protocol chat and call client

Sie können die Beschreibung einer bekannten Manpage anzeigen, indem Sie whatis:

$ whatis empathy
empathy (1)          - GNOME multi-protocol chat and call client

Wie gesagt, diese Methode durchsucht nicht den gesamten Manpage-Body, gibt also apropos Stallmannichts zurück ...

Byte Commander
quelle