Как найти определенный переключатель на странице руководства

15

Предположим, что я хочу знать использование -i в команде grep без прокрутки. Мне нужна спецификация только для этой команды или, по крайней мере, на первом экране. Так как? Как вы можете сказать, в целом не только для grep -i .

    
задан M R R 11.05.2014 в 14:14
источник

9 ответов

12

Попробуйте эту простую команду sed ,

$ man grep | sed -n '/-i, --ignore-case/,+2p'
    -i, --ignore-case
              Ignore  case  distinctions  in  both  the  PATTERN and the input
              files.  (-i is specified by POSIX.)

Пояснение:

sed -n '/-i, --ignore-case/,+2p'

        |<-Search pattern->|

Он напечатает строку, содержащую шаблон поиска, вместе с двумя строками, которые отображаются чуть ниже в строке шаблона поиска.

ИЛИ

Вы можете просто указать только флаги в поиске, как показано ниже.

[email protected]:~$ man grep | sed -n '/ *i, -/,+3p'
       -i, --ignore-case
              Ignore  case  distinctions  in  both  the  PATTERN and the input
              files.  (-i is specified by POSIX.)

[email protected]:~$ man grep | sed -n '/ *V, -/,+3p'
       -V, --version
              Print  the version number of grep to the standard output stream.
              This version number should be included in all bug  reports  (see
              below).
[email protected]:~$ man grep | sed -n '/ *F, -/,+3p'
       -F, --fixed-strings
              Interpret PATTERN as a  list  of  fixed  strings,  separated  by
              newlines,  any  of  which is to be matched.  (-F is specified by
              POSIX.)
[email protected]:~$ man grep | sed -n '/ *G, -/,+3p'
       -G, --basic-regexp
              Interpret PATTERN  as  a  basic  regular  expression  (BRE,  see
              below).  This is the default.

Вы можете добавить этот скрипт к своему .bashrc ( $HOME/.bashrc ) для быстрого доступа:

mangrep(){
    USAGE="mangrep <application> <switch>"
    if [[ "$#" -ne "2" ]]
      then
          echo "Usage: $USAGE"
      else
          man "" | sed -n "/ *"", -/,+3p"
    fi
}
    
ответ дан Avinash Raj 11.05.2014 в 14:20
источник
21

Введите следующую команду на терминал:

man grep

Затем введите символ слэша, / и напишите свой поиск, например -i , а затем Enter . Это поместит курсор в первое вхождение строки поиска. Нажатие n перемещает курсор на следующее вхождение. Нажатие Shift + n перемещает курсор в предыдущее вхождение.

    
ответ дан girardengo 11.05.2014 в 14:34
8

В то время как самый простой подход заключается в поиске с помощью / , как предлагается @girardengo, вы также можете использовать grep вместо sed , которое я нахожу более простым:

$ man grep | grep -A 1 '^ *-i'
   -i, --ignore-case
          Ignore  case  distinctions  in  both  the  PATTERN and the input
          files.  (-i is specified by POSIX.)

-A N означает «Печать N строк после соответствующего совпадения». Просто трюк, чтобы получить следующие несколько строк, похожие на Avinash's sed .

    
ответ дан terdon 11.05.2014 в 15:03
3

Вы можете использовать функцию поиска внутри man , только pres "s" , введите ключ, который вы ищете, (-i в вашем случае) и нажмите ввод.

    
ответ дан darent 11.05.2014 в 14:19
3

Или вы можете позволить этому сайту выполнить поиск:

Ссылка

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

    
ответ дан Tom 14.05.2014 в 01:14
2

Самый эффективный метод, о котором я знаю, - это поиск man-страницы для -i (этот сайт, похоже, не смог отобразить мой код. Я имею в виду <space><space><space>-i ). Это 3 пробела (вам может потребоваться больше / меньше пробелов), а затем флаг, который вы ищете. Это почти всегда работает в моем опыте, и вы можете перейти на какой-то его вариант в тех случаях, когда он не работает.

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

    
ответ дан Harold R. Eason 11.05.2014 в 21:32
1

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

info grep Invoking Command-line\ Options Matching\ Control

Я найду всю информацию о «grep», как «вызывать» конкретные «параметры командной строки» для «соответствия». К сожалению, это не намного глубже, но у него -i , -y , --ignore-case в первых 25 строках, что-то разумное, что вам не нужно прокручивать весь ваш путь вниз.

Это решение является более гибким, а также позволяет искать все инфо-страницы:

info --apropos=--ignore-case
"(coreutils)join invocation" -- --ignore-case <1>
"(coreutils)uniq invocation" -- --ignore-case <2>
"(coreutils)sort invocation" -- --ignore-case
"(gettext)msggrep Invocation" -- --ignore-case, ‘msggrep’ option
"(grep)Matching Control" -- --ignore-case

(пришлось использовать --ignore-case вместо -i , поскольку он был слишком распространен, но вы можете просто обрабатывать вывод для информации в любом случае)

В этом случае у вас есть имя информационной страницы и точный раздел. Ах, почти забыл, вы также можете просто tab пройти через большинство разделов информационных страниц.

    
ответ дан Braiam 12.05.2014 в 06:46
1

Вы можете использовать Perl и его «режим абзаца», чтобы извлечь только соответствующий абзац:

man grep | perl -00 -ne 'print if / -i/'
    
ответ дан choroba 08.03.2016 в 18:17
0

Как less используется по умолчанию в качестве пейджера для man , вы можете использовать переменную среды LESS , чтобы передать шаблон для поиска, когда less открывает страницу. Это идентично выполнению, например, man ls , а затем выполните поиск опции --all или -a , набрав / , а затем введите шаблон, например. --all или -a .

Все это можно сделать:

LESS='+/--all' man ls

или

LESS='+/-a' man ls

Введите то, что вы хотите найти после / .

Предположительно это лучше всего подходит для длинных опций (например, --all ) по сравнению с короткими (например, -a ).

    
ответ дан heemayl 26.07.2016 в 18:00