Предположим, что я хочу знать использование -i
переключатель в grep
команда без прокрутки. Я нуждаюсь в спецификации только для той команды или по крайней мере вижу, что экран показывает это сначала. Итак, как? Поскольку можно сказать что в целом не только для grep -i
.
Попробуйте эту простую команду 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
}
Введите следующую команду на терминале:
man grep
Затем введите символ косой черты, / и введите запрос, например -i
, а затем Введите . Это поместит курсор в первое вхождение строки поиска. Нажатие n перемещает курсор к следующему вхождению. Нажатие Shift + n перемещает курсор к предыдущему вхождению.
В то время как самый простой подход - поиск с помощью / , предложенный @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 Авинаша
].
Вы можете использовать функцию поиска внутри man
, просто нажмите "s"
, введите ключ, который вы ищете, (-i в ваш случай) и нажмите intro.
Или вы можете пусть этот сайт выполнит поиск за вас:
http://explainshell.com/explain?cmd=grep+-i
Вам нужно ненадолго переключиться с терминала на браузер, но есть способы обойти это тоже.
Самый эффективный метод, о котором я знаю, - это поиск на странице руководства по запросу -i
(Кажется, этот сайт не отображает мой код. Я имею в виду ] <пробел> <пробел> <пробел> -i
). Это 3 пробела (вам может понадобиться больше / меньше пробелов), за которыми следует флаг, который вы ищете. По моему опыту, это почти всегда работает, и вы можете изменить его на какой-либо вариант в тех случаях, когда он не работает.
Это работает, потому что фактическая документация по флагам обычно имеет отступ. Он позволяет избежать упоминания флага в других разделах, потому что обычно перед ними стоит только один пробел.
Все ответы могут быть хорошими, но я думаю, что вы сосредоточены только на части документации, а не на всей. Например, чтобы найти переключатель -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 пройти через большинство разделов информационных страниц.
Вы можете использовать Perl и его «режим абзаца» для извлечения только соответствующего абзаца:
man grep | perl -00 -ne 'print if / -i/'
Мой любимый подход к поиску заданного параметра на странице man
- использовать регулярное выражение, например \ s {2,} - option
]. Чтобы ответить на вопрос, вы можете выполнить man grep
, а затем ввести регулярное выражение:
/\s{3,}-i
или
/ {3,}-i
^------------- space here
. Это будет соответствовать -i
, только если за ним следует три или более пробелов.
Поскольку less
используется по умолчанию в качестве пейджера для man
, вы можете использовать переменную среды LESS
, чтобы передать шаблон для поиска, когда less
открывает страницу. Это идентично, например, man ls
, а затем выполните поиск опции - all
или -a
, набрав / , а затем введите шаблон, например - все
или -a
.
Все это можно сделать с помощью:
LESS='+/--all' man ls
Или
LESS='+/-a' man ls
Введите то, что вы хотите найти, после /
.
По-видимому, это лучше всего работает для длинных вариантов (например, - все
) по сравнению с короткими (например, -a
).
Если вы хотите 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.