Я пытаюсь найти команду для поиска шаблона, содержащего дефисы на всех страницах руководства.
Я посмотрел man man
и нашел эти 3 варианта:
-K
,--global-apropos
Поиск текста на всех страницах руководства. Это грубый поиск, и он может занять некоторое время; если вы можете, вы должны указать раздел, чтобы уменьшить количество страниц, которые нужно искать. Условия поиска могут быть простыми строками (по умолчанию) или регулярными выражениями, если используется эта
--regex
опция.
-w
,--where
,--path
,--location
На самом деле не отображайте страницы справочника, а печатайте расположение (я) исходных файлов nroff, которые будут отформатированы.
-S list
,-s list
,t--sections=list
Список - это разделенный двоеточиями или запятыми список разделов руководства по заказам для поиска. Эта опция переопределяет
$MANSECT
переменную среды. (-s
Правописание для совместимости с Системой V.)
Я попытался объединить их для поиска шаблона, mark-modified-lines
который является опцией readline, описанной в man bash
:
$ man -s1 -Kw mark-modified-lines
Но он не находит ни одной страницы:
No manual entry for mark-modified-lines
И команда выходит с кодом 16
.
Я подумал, что, возможно, синтаксис команды был неправильным, но это не так, поскольку эта команда правильно находит 5 справочных страниц в моей системе, которые содержат слово 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
Я думал, что, возможно, дефисы в слове вызвали проблему. В man bash
, я нашел --regex
вариант, который описывается следующим образом:
--regex
Показать все страницы с любой частью их имен или описаний, соответствующих каждому аргументу страницы, как регулярное выражение, как с
apropos(1)
. Поскольку обычно нет разумного способа выбрать «лучшую» страницу при поиске регулярного выражения, эта опция подразумевает-a
.
Я попытался использовать эту опцию и заменить слово mark-modified-lines
на регулярное выражение mark.modified.lines
, где дефисы сами заменяются метасимволом, .
который должен соответствовать любому символу:
$ man -s1 -Kw --regex 'mark.modified.lines'
Он по-прежнему не печатает ни одной страницы, хотя я знаю, что текст написан на bash
странице руководства .
.
Кажется, что метасимвол в регулярном выражении анализируется, как и ожидалось, поскольку эта команда:
$ man -s1 -Kw --regex 'mark.mo'
Печать:
/usr/share/man/man1/x11perfcomp.1.gz
/usr/share/man/man1/xditview.1.gz
И эти 2 manpages ( x11perfcomp
, xditview
) совпадают с регулярным выражением mark.mo
. Более конкретно, man x11perfcomp
содержит эту строку:
Mark Moraes wrote the original scripts to compare servers.
^^^^^^^
И man xditview
содержит эту строку:
Mark Moraes (University of Toronto)
^^^^^^^
Однако, man -s1 -Kw --regex 'mark.mo'
не распечатывает страницу руководства bash:
/usr/share/man/man1/bash.1.gz
Хотя я ожидал, что это будет, так как он содержит эту строку:
mark-modified-lines (Off)
^^^^^^^
Можно ли искать шаблон, содержащий дефисы внутри страниц руководства?