grep man-страница команды для переноса опций


18

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


4
научиться искать в Vim
arsaKasra

Ответы:


14

Попробуйте эту простую 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->|

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

ИЛИ

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

avinash@avinash-Lenovo-IdeaPad-Z500:~$ 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.)

avinash@avinash-Lenovo-IdeaPad-Z500:~$ 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).
avinash@avinash-Lenovo-IdeaPad-Z500:~$ 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.)
avinash@avinash-Lenovo-IdeaPad-Z500:~$ man grep | sed -n '/ *G, -/,+3p'
       -G, --basic-regexp
              Interpret PATTERN  as  a  basic  regular  expression  (BRE,  see
              below).  This is the default.

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

mangrep(){
    USAGE="mangrep <application> <switch>"
    if [[ "$#" -ne "2" ]]
      then
          echo "Usage: $USAGE"
      else
          man "$1" | sed -n "/ *"$2", -/,+3p"
    fi
}

23

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

man grep

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


1
Это будет найти все И -i« man greppage.But OP хочет только описание , связанное с -iфлагом страницы человека.
Авинаш Радж

3
@AvinashRaj нет, это позволит вам циклически проходить каждый случай -i. Это именно то, что хочет ОП.
тердон

9

В то время как самый простой подход заключается в поиске /по предложению @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 sed .


3

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


Я набираю man grep, после чего нажимаю s, после чего вижу файл журнала: после этого я набираю -i и ENTER, но не вижу описания. Или есть что-то, чего я не знаю
Мохаммад Реза Резвани,


2

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

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


1

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

info grep Invoking Command-line\ Options Matching\ Control

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


1

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

man grep | perl -00 -ne 'print if / -i/'

1

Мой любимый подход к поиску заданного параметра на manстранице - использовать регулярное выражение типа \s{2,}-option. Для вопроса в вопросе, вы можете сделать, man grepа затем введите регулярное выражение:

/\s{3,}-i

или

/ {3,}-i
 ^------------- space here

Это будет соответствовать -iтолько тогда, когда следуют три или более пробелов.


0

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

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

LESS='+/--all' man ls

Или

LESS='+/-a' man ls

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

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


0

Если вы хотите , чтобы grepв man <program>результатах для шаблона , начиная с дефисом, использование -- до шаблона вы указываете. Пример использования man find:

man find | grep -- -type

Если вам нужна дополнительная информация, например, весь раздел, описывающий опцию, попробуйте использовать sed:

$ man find | sed -n '/-mindepth/,/^$/p'
   -mindepth levels
          Do  not apply any tests or actions at levels less than levels (a
          non-negative integer).  -mindepth  1  means  process  all  files
          except the command line arguments.

Источник

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.