Дело не в том, что непривилегированный пользователь не может использовать эти команды, а в том, что они не находятся по умолчанию в PATH
обычного пользователя.
На моем компьютере Jessie эти команды находятся в папке /sbin
, а не в /bin
; однако мой обычный пользователь может запускать их с помощью /sbin/command
.
grep -E --color=always 'Dwhite|date|time' VPNsyslog-2016
Обратите внимание, что grep
не поддерживает разные цвета для разных совпадений в одной команде - и объединение их в конвейер является эффективной операцией AND (поэтому будут выведены только строки, соответствующие всем трем шаблонам - и только последний шаблон будет выделен).
Если вам нужна более настраиваемая подсветка лог-файла, вам придется использовать специализированные инструменты, такие как ccze, clog, colortail, pygmentize или highlight (среди прочих). Все они, вероятно, уже упакованы для вашего дистрибутива linux (они точно есть в Debian и производных от Debian, таких как Ubuntu).
Вы можете попробовать следующее:
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
.
Значение 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 или в этой ветке .