Я хочу найти определенные параметры, такие как -s
, -f
, -l
, на странице руководства и отображать только те результаты, которые содержат информацию о том, что те варианты делают. Я попробовал эту команду, надеясь, что одинарные кавычки обойдут grep
из параметров получения:
man --pager=cat some_man_page_here | grep '-option_here'
Я также пробовал \
, но grep
выдает синтаксическую ошибку:
Usage: grep [OPTION]... PATTERNS [FILE]...
Try 'grep --help' for more information.
Я просто хочу знать, есть ли способ использовать grep
для поиска параметров на страницах руководства. В настоящее время я использую кнопку Найти на верхней панели терминала, но я хотел бы иметь возможность использовать grep
для повышения эффективности.
Будет ли это работать в вашем случае?
$ man ls | grep -- '--a'
-a, --all
-A, --almost-all
--author
Более подробный (надеюсь, более понятный) пример команды:
$ man shutdown | grep -- '-'
shutdown - Halt, power-off or reboot the machine
shutdown may be used to halt, power-off or reboot the machine.
logged-in users before going down.
--help
-H, --halt
-P, --poweroff
Power-off the machine (the default).
-r, --reboot
-h
Equivalent to --poweroff, unless --halt is specified.
-k
Do not halt, power-off, reboot, just write wall message.
--no-wall
Do not send wall message before halt, power-off, reboot.
-c
On success, 0 is returned, a non-zero failure code otherwise.
Изменить:
Как ] Гленн Джекман прокомментировал ниже (очень полезно):
И чтобы сузить результаты до строк, начинающихся с дефиса:
grep '^ [[: space:]] * -' -
Тестовый запуск:
$ man shutdown | grep -- '-' | grep '^[[:space:]]*-'
--help
-H, --halt
-P, --poweroff
-r, --reboot
-h
-k
работая с простой функцией, чтобы возвращать только конкретную часть, относящуюся к переключателям команды, и их последующее краткое описание, кроме того, непосредственно с их страниц руководства:
sman() {
man "${1}" \
| grep -iozP -- "(?s)\n+\s+\K\Q${2}\E.*?\n*(?=\n+\s+-)"
}
Назовите это sman <имя-команды> <переключатель>
, например: sman ls -A
-a, --all
do not ignore entries starting with .
-A, --almost-all
do not list implied . and ..
Пояснения (из https://regex101.com/ ):
-i
- включить совпадение без учета регистра -o
- вернуть только совпавшую часть -z
- обрабатывать входные и выходные данные как последовательности строк, каждая из которых заканчивается символом нулевой байт (символ NUL ASCII) вместо новой строки. -P
- позволяет PCRE (? s)
сопоставить остаток шаблона со следующими эффективными флагами: s \ n +
соответствует символу перевода строки (новой строки) \ s +
соответствует любому пробельному символу \ K
сбрасывает начальную точку зарегистрированного совпадения. Любые ранее использованные символы больше не включаются в окончательное соответствие \ Q $ {2} \ E
Quoted Literals - соответствует расширенным символам $ 2 буквально . *?
соответствует любому символу \ n *
соответствует символу перевода строки (новой строки) (? = \ N + \ s + -)
Положительный прогноз: утверждение, что приведенное ниже регулярное выражение соответствует: \ n +
соответствует символу перевода строки (новой строки). \ s +
соответствует любому пробельному символу -
буквально соответствует символу -
.