Як шукати шаблон, що містить дефіси на сторінках людини?


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який є варіантом перегляду, описаним у 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 man:

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

Хоча я і сподівався, що він містить цей рядок:

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

Чи можливо шукати шаблон, що містить дефіси всередині довідкових сторінок?

Відповіді:


15

man -Kздійснює пошук вихідного коду на сторінках керівництва, а не в їх наданій формі (як показано на man). Дефіси закодовані \-, тому вам потрібно знайти:

man -s1 -Kw 'mark\-mo'

Так, це досить незрозуміло. Сторінка manчоловіка в описі -Kваріанту зазначає , що

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

але правильне використання цього передбачає знання вихідного подання тексту, який ви шукаєте.


1
Похмурий? Так. Також це помилка.
kubanczyk

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