2016-11-07 4 views
1

Я хотел бы прочитать только разделы того, что я ищу на странице руководства.Чтение разделов на странице руководства с помощью команды терминала man

Например, чтобы прочитать только разделы -k на странице руководства по man я могу использовать

man man | grep -E '(-k)' 

Результат:

man -k [apropos options] regexp ... 
man -k printf 
-k, --apropos 
     which in turn overrides the $PAGER environment variable. It is not used in conjunction with -f or -k. 

Результат плох, потому что не все разделы мне нужно.
Так в настоящее время я использую:

man man | grep -E '(-k|'')' 

В результате весь текст, но отмечен -k в красном цвете.

Мой вопрос, как я могу получить вывод, подобный этому:

man -k [apropos options] regexp ... 
man -k printf 
     Search the short descriptions and manual page names for the keyword printf as regular expression. Print out any matches. 
     Equivalent to apropos printf. 
-k, --apropos 
      Equivalent to apropos. Search the short manual page descriptions for keywords and display any matches. See apropos(1) 
      for details. 
+0

Импорт для вас, чтобы получить все строки с -k, включая примеры в обзоре при начале man-страницы, или описание описания параметров достаточно для вас? – sebkrueger

+0

Какой-то парень предложил 'man man | sed '/ -k /,/^ $ /! d'', но это не работает для' -r' – Benny

+1

Поскольку есть случайные совпадения '-r' like' --regex' ... вы можете их исключить указав следующий символ, который будет пробелом или запятой, поэтому 'man man | sed '/ -k [,] /,/^ $ /! d'', но, очевидно, остановка на пустой строке не дает вам то, что вы хотите: S – Zanna

ответ

0

Вы должны рассмотреть то, что вы имеете в виду по разделам -к (-AnyOther)

Например что по этому поводу вступления ?:

-P pager, --pager=pager 
      Specify which output pager to use. By default, man uses pager -s. This option overrides the $MANPAGER environment variable, which in turn overrides the $PAGER environment variable. It 
      is not used in conjunction with -f or -k. 

Это также связано с -k.

Основываясь на вашем примере, я полагаю, вы хотите пропустить эту запись. Если это так, я бы рекомендовал использовать два регулярные выражение:

"^\s*-k" # for the case when -k is at the beginning 
"man -k" # self explainable :) 

Из найденных записей вы должны напечатать все строки ниже с более пробелами перед первым печатаемым характером, чем это было в вашей игре.

Я не уверен, что grep или sed являются подходящими инструментами для этой работы. Лично я бы попытался сделать это с помощью python или awk.

+0

Печать всех строк, начинающихся с строки, соответствующей регулярному выражению и заканчивающейся строкой, которая соответствует другому регулярному выражению, является общим заданием для 'awk' и, вероятно, будет проще, чем писать скрипт python. –