Как использовать grep для поиска параметров на странице руководства? [дубликат]

Я хочу найти определенные параметры, такие как -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 для повышения эффективности.

8
задан 9 October 2020 в 20:20

2 ответа

Будет ли это работать в вашем случае?

$ 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
9
ответ дан 4 January 2021 в 08:20

работая с простой функцией, чтобы возвращать только конкретную часть, относящуюся к переключателям команды, и их последующее краткое описание, кроме того, непосредственно с их страниц руководства:

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 + соответствует любому пробельному символу
    - буквально соответствует символу - .
5
ответ дан 4 January 2021 в 08:20

Другие вопросы по тегам:

Похожие вопросы: