От dd(1)
:
bs=BYTES
/.../
БЛОКИ и БАЙТЫ могут сопровождаться следующими мультипликативными суффиксами: c =1, w =2, b =512, КБ =1000, K =1024, МБ =1000*1000, M =1024*1024
С другой стороны, если у Вас есть последняя версия удара, {}
конструкция также предпринимает шаги параметр:
for i in {10000..100000..1000}; do dd if=/dev/zero of=testfile$i bs=$i count=1 ; done
Я не думаю, что Вы можете с tr
потому что заменяющий набор является усеченным к длине набора соответствия, и изменяющий цвет требует некоторых управляющих символов.
Не невозможный с sed
tho:
tail -f file.log | sed s/\001/\\x1b[32m\|\\x1b[0m/g
1b
шестнадцатеричное число для восьмеричного 33
, часто замеченный в вещах как цветные подсказки, потому что оболочке нравится восьмеричный (но передать "непечатные" управляющие символы sed
, используйте шестнадцатеричное число). Например, чтобы просто распечатать зеленую панель:
echo -e "\033[32m|\033[0m"
Управляющие последовательности являются "escape-последовательностями ANSI", видят здесь для деталей (32, зеленый передний план, 0 сбрасывается). Восьмеричные 33 = десятичные 27 = символ 'ESC' ASCII, следовательно "escape-последовательность".
tail -f file.log | sed -n '/TEST/s/\x1/\x1b[32m|\x1b[0m/gp'
-n
скажите sed подавлять вывод по умолчанию (но финал p
скажет для печати подобранных строк, своего рода grep),/TEST/
выбор только выравнивает, которые соответствуют (как grep)s
заменять \x1
(\x
Escape оболочки для шестнадцатеричных значений) с \x1b[32m|\x1b[0m
. \x1b[
запустите управляющий код ANSI32
цветной зеленый для приоритетного текста\x1b[0m
сбросьте основной цветg
для глобального, замена очень возникновениеМожно установить его в Вашем .bashrc
как функция (не протестированный)
loggrep() {
sed -n "/$1/s/\x1/\x1b[32m|\x1b[0m/gp"
}
tail -f file.log | sed -n '/TEST/ "s/\x1/$(tput setaf 2)|$(tput sgr0)/gp"
, который получит соответствующий код для Вашего типа термина для "зеленого" и
– Drav Sloan
06.09.2013, 19:54
Я не вижу, как Ваша команда может работать с тех пор (по крайней мере, в моей системе) tail -f
не может быть передан по каналу дважды начиная со второй программы Вы передаете по каналу к (grep
в Вашем случае), ожидает, пока вход не закончился прежде, чем распечатать результаты.
Так или иначе стандартный метод - то, что предложенный лютик золотистый, с помощью ANSI выходят из цветных последовательностей. Так как я делаю это очень часто, я записал немного сценария, который окрасит любую строку, которую Вы даете ему:
#!/usr/bin/env perl
use Getopt::Std;
use strict;
use Term::ANSIColor;
my %opts;
getopts('hic:l:',\%opts);
if ($opts{h}){
print<<EoF;
Use -l to specify the pattern(s) to highlight. To specify more than one
pattern use commas.
-l : A Perl regular expression to be colored. Multiple expressions can be
passed as comma separated values: -l foo,bar,baz
-i : makes the search case sensitive
-c : comma separated list of colors;
EoF
exit(0);
}
my $case_sensitive=$opts{i}||undef;
my @color=('bold red','bold blue', 'bold yellow', 'bold green',
'bold magenta', 'bold cyan', 'yellow on_magenta',
'bright_white on_red', 'bright_yellow on_red', 'white on_black');
if ($opts{c}) {
@color=split(/,/,$opts{c});
}
my @patterns;
if($opts{l}){
@patterns=split(/,/,$opts{l});
}
else{
$patterns[0]='\*';
}
# Setting $| to non-zero forces a flush right away and after
# every write or print on the currently selected output channel.
$|=1;
while (my $line=<>)
{
for (my $c=0; $c<=$#patterns; $c++){
if($case_sensitive){
if($line=~/$patterns[$c]/){
$line=~s/($patterns[$c])/color("$color[$c]").$1.color("reset")/ge;
}
}
else{
if($line=~/$patterns[$c]/i){
$line=~s/($patterns[$c])/color("$color[$c]").$1.color("reset")/ige;
}
}
}
print STDOUT $line;
}
Если Вы сохраняете его как color
в каталоге, который находится в Вашем $PATH
и сделайте это исполняемым файлом (chmod +x/usr/bin/color), можно окрасить строки из журнала ошибок как это:
tr '\001' '|' < file.log | color -l "\|"
Как записано, сценарий предопределил цвета для 10 различных шаблонов, таким образом давая ему список разделенных запятой значений, как я имею в примере выше, окрасит каждый из шаблонов подобранным в различном цвете.
К colorize |
символ, канал к
sed -e "s/\|/$(tput setaf 2)\\0$(tput sgr0)/g"
Терминальные возможности setaf
и sgr0
упоминаются в terminfo(5)
.
\001
соответствовать вопросу. – goldilocks 20.01.2016, 11:31