После проверки вы можете напрямую выводить цветной текст в терминал, используя awk
. В приведенном вами примере вы можете создать файл сценария awk (например, displayLog.awk
), содержащий следующий код:
# output INFO lines in cyan
$3 == "INFO" {
print "\033[36m"$0"\033[0m"
next
}
# don't display DBG lines
$3 == "DBG" {
next
}
# output WARNING lines in bright yellow
$3 == "WARNING" {
print "\033[1;33m"$0"\033[0m"
next
}
# output ERROR lines in bright red
$3 == "ERROR" {
print "\033[1;31m"$0"\033[0m"
next
}
# If you want to skip all other lines, comment next line
{print}
Затем откройте чистое окно терминала, убедитесь, что отображение неограничено (вы можете отобразить все 6000 строк сразу) и используйте его следующим образом:
$ awk -f displayLog.awk log.txt
OR Как пользователь jlliagre предложил в своем решении, перенаправьте его в необработанный режим less
:
$ awk -f displayLog.awk log.txt | less -R
Это должно сработать Хитрость ! Вы можете поиграть с цветами и тем, какие строки вы хотите отображать, основываясь на примере кода awk
в моем ответе. Подробнее о цветовом кодировании здесь .
РЕДАКТИРОВАТЬ
Если вы хотите, чтобы было окрашено только одно слово, а не целая строка (например, вы хотите, чтобы ОШИБКА была только красной), сделайте следующее:
$3 == "ERROR" {
$3 = "\033[1;31m"$3"\033[0m"
print
next
}
_=
в начале строки в выводе простого набора означает, что в bash есть переменная с именем_
(подчеркивание ). И его значение равно тому, что следует за =
. Например, установка переменной с именем test_var
на 12345
даст (в bash):
$ test_var=12345
$ set | grep test_var
test_var=12345
$ declare -p test_var
test_var=12345
Эта специальная переменная bash будет установлена в последний аргумент предыдущей строки:
$ echo "Testing some" "values" "in the shell" "(only bash)" "_=myvar=hello"
Testing some values in the shell (only bash) _=myvar=hello
$ echo "$_"
_=myvar=hello
$ echo "Testing some" "values" "in the shell" "(only bash)" "_=myvar=hello"
Testing some values in the shell (only bash) _=myvar=hello
$ declare -p _
declare -- _="_=myvar=hello"
Обратите внимание на два=
в этом выводе.
При выполнении set -a var=99
, происходят три различных события (, связанные с вашим вопросом):
-a
)(в обратном порядке, выполнивset +a
)для экспорта переменных. $1
, установленными наvar=99
). $_
установлено в последний параметр (, расширенный ). Выполнение set -a
помечает все последующие (новые или измененные )переменные как экспортированные (во всех оболочках, кроме csh
и некоторых родственных оболочках ).
$ set -a
$ myvariable=wer
$ env | grep myvariable
myvariable=wer
Чтобы вернуться к этой настройке, просто измените -
на +
:
$ set +a
$ unset myvariable # to erase it from the environment if it
# was exported before the change of set +a
$ myvariable=456544654 # A new value of the variable.
$ env | grep "variable" # No output means the var does not exist
# in the current environment
Что на самом деле должно быть set -- var=99
, чтобы избежать интерпретации опции (и set has lot )со значениями, начинающимися с тире(-
).
Устанавливает список аргументов (список позиционных параметров )на то, что после --
. Это справедливо для всех разумных оболочек (, но не для csh и др. ). Позиционные аргументы печатаются с "$@" (или аналогичным "$ *", не равным ).
$ set -- a=1 b=2 c=3
$ echo "$@"
a=1 b=2 c=3
#_=последний _аргумент И значение внутренней переменной оболочки _
изменится на последний аргумент исполняемой строки. Это НЕ верно почти для всех оболочек (jsh, ash, yash, dash, lksh, mksh, ksh93,attsh и, конечно же, csh и tcsh ), кроме bash.
$ echo one two last argument
one two last argument
$ echo "$_"
argument
$ echo This is a new: last_argument
This is a new: last_argument
$ echo "$_"
last_argument
Обратите внимание, что значение в $_
— это значение после расширения :
$ a="A New_Argument"
$ echo Something else to test: "$a"
Something else to test: A New_Argument
$ echo "$_"
A New_Argument
Вот почему при выполнении:
$ set -a myvar=99; set | grep 'myvar'
_=myvar=99
Вы получаете описание переменной оболочки '$ _'. Это тоже работает:
$ set -a myvar=99; declare -p _
declare -- _="myvar=99"
Символ подчеркивания на самом деле является специальной переменной оболочки. Здесь вы видите переменную подчеркивания(_
)со значением var=99
. Он доступен только для чтения и поддерживается оболочкой. Это:
Ваш пример относится ко второй категории. Вы набрали:
set -a var=99
Таким образом, последний аргумент был var=99
, и это было значение , которое вы устанавливали (вы не устанавливали var
в99
). Следовательно, _
было установлено на это. Об этом сообщается :
_=var=99
Это немного сбивает с толку, но первое =
указывает на присваивание переменной _
, а второе является частью значения.
Также стоит упомянуть, что опция -a
для set
приведет к экспорту всех последовательно определенных переменных .
Правильный ответ зависит от используемой вами оболочки:
bash
, применимо все, что сказал @BobEager zsh
, устанавливается только последний аргумент предыдущей команды и полный путь к команде в среде команды dash
, устанавливают эту переменную только при запуске интерактивного сеанса В других оболочках могут быть и другие особенности. Таким образом, $_
является не определенным в POSIX, поэтому при его использовании следует помнить о потенциальных проблемах с переносимостью.
Примечание :Если вы намерены присвоить значение 99 для var
и сделать его доступным в среде последующих подпроцессов, правильный синтаксис для достижения этого:
export var=99