Канал для трех команд [дубликат]

В руководстве по sudo мне нужно найти -k , поэтому я попробовал следующее:

man sudo | grep '\-k'

Но это привело бы к наполовину написанному абзацу на выходе:

sudo -h | -K | -k | -V
             Similar to the -k option, except that it removes the user's
 -k, --reset-timestamp

Вместо этого я попытался распечатать все руководство и раскрасить поисковую фразу следующим образом:

man sudo | grep '\-k\|$'

Но поскольку страница руководства слишком длинная, я не могу прокрутить достаточно, чтобы добраться до начала вывода (Примечание: я не хотите изменить строки прокрутки в настройках профиля Терминала).

Поэтому мне нужно использовать команды more или less , чтобы иметь возможность отображать вывод по страницам, поэтому я попробовал:

man sudo | grep '\-k\|$' | less

Но, конечно, это не работает , потому что конвейер запускает вторую команду по 1-й команде.

Есть идеи, как перенаправить конвейер?

Или заставить grep печатать весь абзац вместо одной строки? (строки основаны на размере окна Терминала)

0
задан 8 February 2018 в 12:31

3 ответа

man по умолчанию уже использование less как пейджер для отображения содержания страницы руководства.

Теперь less уже имеет встроенный поиск и функцию выделения, таким образом, Вам не нужен внешний инструмент как grep для этого.

Просто откройте страницу справочника путем выполнения man sudo в оболочке затем введите /-k (нажмите / и введите свой шаблон поиска). less теперь выделится везде, где это регулярное выражение соответствия в документе и также переходит непосредственно к первому вхождению.

Можно затем перейти к следующему соответствию путем ввода n (нажмите N), или предыдущее соответствие путем ввода N (нажмите Shift+N).


Более общий, если Вы хотите просмотреть grepвывод с красочным выделением в less, необходимо использовать grep --color=always (чтобы всегда испустить цветовые коды, не производя к терминалу, но каналу) и less -R (для интерпретации цветных Escape вместо того, чтобы печатать управляющие символы):

man sudo | grep --color=always '\-k\|$' | less -R
3
ответ дан 31 October 2019 в 01:29

Используйте grep, -A, -B и -C, чтобы поймать окружающие линии

man grep | grep '\-[ABC]' -A2

   -A NUM, --after-context=NUM
          Print NUM lines of trailing context after matching lines.  Places a line containing a group separator (described under --group-separator) between contiguous groups of matches.  With the -o or
          --only-matching option, this has no effect and a warning is given.

   -B NUM, --before-context=NUM
          Print NUM lines of leading context before matching lines.  Places a line containing a group separator (described under --group-separator) between contiguous groups of matches.  With the -o or
          --only-matching option, this has no effect and a warning is given.

   -C NUM, -NUM, --context=NUM
          Print  NUM  lines  of  output  context.   Places  a line containing a group separator (described under --group-separator) between contiguous groups of matches.  With the -o or --only-matching
          option, this has no effect and a warning is given.

В вашем случае:

man sudo | grep '\-k' -A5 -B2

Это конечно, не идеально, так как вы не знаете, сколько строк нужно, но это все же может помочь вам найти то, что вам нужно.

3
ответ дан 31 October 2019 в 01:29

Возможно, пейджер most удовлетворит ваши требования. Попробуйте

export PAGER=most
man sudo
/-k
1
ответ дан 31 October 2019 в 01:29

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

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