Wie suche ich ein Muster mit Bindestrichen in Manpages?

11

Ich versuche, einen Befehl zu finden, um nach einem Muster zu suchen, das Bindestriche in allen Manpages enthält.

Ich habe mir man mandiese 3 Optionen angesehen und gefunden:

-K, --global-apropos

Suchen Sie auf allen Handbuchseiten nach Text. Dies ist eine Brute-Force-Suche, die wahrscheinlich einige Zeit in Anspruch nehmen wird. Wenn Sie können, sollten Sie einen Abschnitt angeben, um die Anzahl der zu durchsuchenden Seiten zu verringern. Suchbegriffe können einfache Zeichenfolgen (Standardeinstellung) oder reguläre Ausdrücke sein, wenn die --regexOption verwendet wird.

-w, --where, --path,--location

Zeigen Sie die Handbuchseiten nicht an, sondern drucken Sie die Speicherorte der Quell-NRoff-Dateien, die formatiert werden sollen.

-S list, -s list,t--sections=list

Liste ist eine durch Doppelpunkte oder Kommas getrennte Liste von auftragsspezifischen manuellen Abschnitten, die durchsucht werden sollen. Diese Option überschreibt die $MANSECTUmgebungsvariable. (Die -sSchreibweise dient der Kompatibilität mit System V.)

Ich habe versucht, sie zu kombinieren, um nach dem Muster zu suchen, bei dem mark-modified-lineses sich um eine Readline-Option handelt, die beschrieben wird in man bash:

$ man -s1 -Kw mark-modified-lines

Aber es findet keine Seite:

No manual entry for mark-modified-lines

Und der Befehl wird mit dem Code beendet 16.
Ich dachte, dass die Syntax des Befehls möglicherweise falsch war, aber es scheint nicht so, da dieser Befehl die 5 Manpages auf meinem System korrekt findet, die das Wort enthalten guitar:

$ man -s1 -Kw guitar

  /usr/share/man/man1/ffmpeg-all.1.gz
  /usr/share/man/man1/ffserver-all.1.gz
  /usr/share/man/man1/ffplay-all.1.gz
  /usr/share/man/man1/ffmpeg-filters.1.gz
  /usr/share/man/man1/ffprobe-all.1.gz

Ich dachte, dass vielleicht die Bindestriche im Wort ein Problem verursachen. In man bashfand ich die --regexOption, die wie folgt beschrieben wird:

--regex

Zeigen Sie alle Seiten mit einem Teil ihres Namens oder ihrer Beschreibung, die mit jedem Seitenargument übereinstimmen, als regulären Ausdruck an, wie bei apropos(1). Da es normalerweise keine vernünftige Möglichkeit gibt, bei der Suche nach einem regulären Ausdruck eine "beste" Seite auszuwählen, impliziert diese Option -a.

Ich habe versucht, diese Option zu verwenden und das Wort mark-modified-linesdurch den regulären Ausdruck zu ersetzen mark.modified.lines, wobei die Bindestriche selbst durch das Metazeichen ersetzt werden, .das mit einem beliebigen Zeichen übereinstimmen sollte:

$ man -s1 -Kw --regex 'mark.modified.lines'

Es wird immer noch keine Seite gedruckt, obwohl ich weiß, dass der Text in der bashManpage geschrieben ist.

Das Metazeichen .in der Regex scheint wie erwartet analysiert zu werden, da dieser Befehl:

$ man -s1 -Kw --regex 'mark.mo'

Drucke:

  /usr/share/man/man1/x11perfcomp.1.gz
  /usr/share/man/man1/xditview.1.gz

Und diese beiden Manpages ( x11perfcomp, xditview) werden beide vom regulären Ausdruck abgeglichen mark.mo. Genauer gesagt man x11perfcompenthält diese Zeile:

Mark Moraes wrote the original scripts to compare servers.
^^^^^^^

Und man xditviewenthält diese Zeile:

    Mark Moraes (University of Toronto)
    ^^^^^^^

Allerdings man -s1 -Kw --regex 'mark.mo'druckt nicht die bash man - Seite:

/usr/share/man/man1/bash.1.gz

Während ich es erwartet hatte, da es diese Zeile enthält:

mark-modified-lines (Off)
^^^^^^^

Ist es möglich, in den Manpages nach einem Muster mit Bindestrichen zu suchen?

user938271
quelle

Antworten:

15

man -KDurchsucht den Quellcode der Handbuchseiten, nicht deren gerenderte Form (wie von angezeigt man). Bindestriche sind verschlüsselt \-, daher müssen Sie danach suchen:

man -s1 -Kw 'mark\-mo'

Ja, das ist ziemlich dunkel. Die manManpage erwähnt in der Beschreibung der -KOption, dass

Beachten Sie, dass dies die Quellen der Handbuchseiten durchsucht , nicht den gerenderten Text, und daher aufgrund von Kommentaren in Quelldateien möglicherweise falsch positive Ergebnisse enthält. Das Durchsuchen des gerenderten Textes wäre viel langsamer.

Um dies richtig zu verwenden, müssen Sie jedoch die Quelldarstellung des gesuchten Textes kennen.

Stephen Kitt
quelle
1
Obskur? Ja. Es ist auch ein Fehler.
Kubanczyk
@ Kubanczyk gut, es entspricht der Spezifikation, aber ja, ich würde zustimmen, dass die Spezifikation fehlerhaft ist ;-).
Stephen Kitt