Стать окрашенным выводом от стандартных команд как grep
, необходимо установить это alias
в Вашем .bashrc
# User specific aliases and functions
alias grep='grep --color=auto'
когда Вы grep что-то в Вашем файле Вы видите что-то вроде этого, (но вероятно в красном):
[root@linuxbox mydir]# grep "\(INFO\|SEVERE\)" /var/log/logname this entry is an INFO SEVERE this entry is a warn! this entry is an INFO this entry is an INFO SEVERE this entry is a warn!
если хотят использовать tail
или awk
и хочу это, цвет выживает к каналу, затем псевдоним недостаточно, и необходимо использовать --color=always
параметр, например:
[root@linubox mydir]# grep --color=always "\(INFO\|SEVERE\)" /var/log/logname | tail -f | awk '{ print $1 }' this SEVERE this this SEVERE
Если Вы хотите цветной текст с awk
история немного сложна, но более мощна, например:
[root@linubox mydir]# tail -f /var/log/messages | awk '{if ($5 ~ /INFO/) print "\033[1;32m"$0"\033[0m"; else if ($1 ~ /SEVERE/) print "\033[1;31m"$0"\033[0m"; else print $0}' this entry is an INFO SEVERE this entry is a warn! this is another ENTRY this entry is an INFO this is another ENTRY this entry is an INFO SEVERE this entry is a warn!
с каждой строкой в ее собственном цвете.
Существуют многие другой способ получить цветной текст от оболочки с другими инструментами, и они хорошо descripted другими участниками.
echo '<e1 name="file1" id="id1" anotherId="id2">' |
sed -n 's/.*name="\([^"]*\)".*/\1/p'
Или с GNU grep
если создано с поддержкой PCRE:
echo '<e1 name="file1" id="id1" anotherId="id2">' |
grep -Po 'name="\K[^"]*'
Вы могли упростить его немного с этой версией:
$ echo '<e1 name="file1" id="id1" anotherId="id2">' | \
sed 's/.*name="\(.*\)" id.*/\1/'
Вы не должны переносить все с parens, только вещи, Вы интересуетесь сохранением для использования позже, таким образом, можно удалить.
Можно также использовать grep
способность использовать механизм регулярного выражения Perl (PCRE):
$ echo '<e1 name="file1" id="id1" anotherId="id2">' | \
grep -Po '(?<=name=")(\w+)(?=")'
Способность PCRE этого использования смотреть вперед и lookbehind. Нотация ищет последовательность символов такой как "name="
перед тем, что мы ищем. Этот бит делает это:
(?<=name=")
Это затем ищет серию словесных символов, это - то, что мы на самом деле ищем:
(\w+)
Последний бит это делает предвидение, является этим:
(?=")
Это ищет кавычку ("
) после того, что мы ищем.
$ echo '<e1 name="file1" id="id1" anotherId="id2">' | \
awk '{gsub("\"","");split($2,a,"="); print a[2]}'
Этот вариант представляет двойные кавычки в виде строки ('"'') выполнение глобальной замены:
gsub("\"","")
Остающаяся строка была бы этим:
<e1 name=file1 id=id1 anotherId=id2>
Таким образом, мы можем позволить awk
разделите это, как это обычно было бы и 2-й столбец быть битом, мы интересуемся получением. Это было бы $2
кому: awk
. Таким образом, мы могли взять ту переменную и затем разделить ее на знаках "равно" (=
).
split($2,a,"=");
Это разделит $2
, и сохраните результаты в массиве, a
. Послесловия мы можем распечатать 2-й элемент в массиве, при этом этот все на правой стороне знака "равно" от $2
.
file1