Как найти шаблон, содержащий дефисы внутри страниц руководства?


11

Я пытаюсь найти команду для поиска шаблона, содержащего дефисы на всех страницах руководства.

Я посмотрел 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)
^^^^^^^

Можно ли искать шаблон, содержащий дефисы внутри страниц руководства?

Ответы:


15

man -Kвыполняет поиск исходного кода страниц справочника, а не их отображаемой формы (как показано man). Дефисы закодированы \-, поэтому вам нужно искать это:

man -s1 -Kw 'mark\-mo'

Да, это довольно неясно. На manстранице руководства в описании -Kопции упоминается , что

Обратите внимание, что при этом выполняется поиск по источникам страниц справочника, а не по отображаемому тексту, и поэтому он может содержать ложные срабатывания из-за таких вещей, как комментарии в исходных файлах. Поиск отрендеренного текста будет намного медленнее.

но для правильного использования необходимо знать исходное представление текста, который вы ищете.


1
Obscure? Да. Кроме того, это ошибка.
Кубанчик

@kubanczyk хорошо, это соответствует спецификации, но да, я согласен, что спецификация глючит ;-).
Стивен Китт
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.