grep страница справочника команды для написанных через дефис опций

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

18
задан 20 January 2019 в 22:44

11 ответов

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

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

ИЛИ

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

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.

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

mangrep(){
    USAGE="mangrep <application> <switch>"
    if [[ "$#" -ne "2" ]]
      then
          echo "Usage: $USAGE"
      else
          man "$1" | sed -n "/ *"$2", -/,+3p"
    fi
}
14
ответ дан 23 November 2019 в 02:05

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

man grep

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

23
ответ дан 23 November 2019 в 02:05

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

-AN означает «Вывести N строк после совпадающей. Просто трюк, чтобы получить следующие несколько строк, аналогично sed Авинаша ].

9
ответ дан 23 November 2019 в 02:05

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

3
ответ дан 23 November 2019 в 02:05

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

http://explainshell.com/explain?cmd=grep+-i

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

3
ответ дан 23 November 2019 в 02:05

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

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

2
ответ дан 23 November 2019 в 02:05

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

info grep Invoking Command-line\ Options Matching\ Control

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

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

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
ответ дан 23 November 2019 в 02:05

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

man grep | perl -00 -ne 'print if / -i/'
1
ответ дан 23 November 2019 в 02:05

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

/\s{3,}-i

или

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

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

1
ответ дан 23 November 2019 в 02:05

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

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

LESS='+/--all' man ls

Или

LESS='+/-a' man ls

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

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

0
ответ дан 23 November 2019 в 02:05

Если вы хотите grep , man результаты для шаблона, начинающегося с дефиса, используйте - перед указанным вами шаблоном. Пример использования 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.

Источник

0
ответ дан 23 November 2019 в 02:05

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

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