выделение параметров с помощью grep

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

На моем компьютере Jessie эти команды находятся в папке /sbin, а не в /bin; однако мой обычный пользователь может запускать их с помощью /sbin/command.

0
08.03.2016, 01:31
3 ответа
grep -E --color=always 'Dwhite|date|time' VPNsyslog-2016

Обратите внимание, что grep не поддерживает разные цвета для разных совпадений в одной команде - и объединение их в конвейер является эффективной операцией AND (поэтому будут выведены только строки, соответствующие всем трем шаблонам - и только последний шаблон будет выделен).

Если вам нужна более настраиваемая подсветка лог-файла, вам придется использовать специализированные инструменты, такие как ccze, clog, colortail, pygmentize или highlight (среди прочих). Все они, вероятно, уже упакованы для вашего дистрибутива linux (они точно есть в Debian и производных от Debian, таких как Ubuntu).

2
28.01.2020, 02:27

Вы можете попробовать следующее:

user@syslog:~$ cat VPNsyslog-2016 | GREP_COLORS='mt=01;32' grep --color=always 'Dwhite' | GREP_COLORS='mt=01;31' grep --color=always 'date' |  GREP_COLORS='mt=01;34' 'time'

или без выполнения команды cat

user@syslog:~$ GREP_COLORS='mt=01;32' grep --color=always 'Dwhite' VPNsyslog-2016 | GREP_COLORS='mt=01;31' grep --color=always 'date' |  GREP_COLORS='mt=01;34' 'time'

В последнем случае STDIN будет иметь содержимое файла с первым grep, так что вам не нужно указывать файл в каждом grep выполнении

Вам не хватает флага --color=always.

1
28.01.2020, 02:27

Значение y по умолчанию, - color раскрашивает вывод, только если он направляется на терминал. Если вывод идет в канал, grep предполагает, что он будет проанализирован программой, которая будет сбита с толку дополнительными escape-последовательностями, которые grep вставляет для раскрашивания вывода. Чтобы раскрасить вывод, даже если он идет в канал, передайте - color = always в все вызовы grep.

GREP_COLORS='mt=01;32' grep --color=always Dwhite VPNsyslog-2016 |
GREP_COLORS='mt=01;31' grep --color=always date |
GREP_COLORS='mt=01;34' grep --color=always time

Обратите внимание, что grep будет печатать только совпадающие строки. В вашем примере конвейеры будут печатать только строки, содержащие Dwhite и дату и время . Если вы хотите распечатать все строки, вы можете указать каждому вызову grep искать либо то, что вы ищете, либо пустую строку; каждая строка содержит пустую строку, поэтому каждая строка попадет в вывод.

GREP_COLORS='mt=01;32' grep --color=always -e '' -e Dwhite VPNsyslog-2016 |
GREP_COLORS='mt=01;31' grep --color=always -e '' -e date |
GREP_COLORS='mt=01;34' grep --color=always -e '' -e time

или с регулярными выражениями:

GREP_COLORS='mt=01;32' grep --color=always -E '|Dwhite' VPNsyslog-2016 |
GREP_COLORS='mt=01;31' grep --color=always -E '|date' |
GREP_COLORS='mt=01;34' grep --color=always -E '|time'

Но если вы не застряли на машине, на которой вы действительно не хотите ничего устанавливать, вам лучше использовать инструмент, предназначенный для раскрашивания вывода, например перечисленные в ответе cas или в этой ветке .

0
28.01.2020, 02:27

Теги

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