Отказ от цветов - вы можете использовать:
# | piped at the end
awk -F'SET timestamp=' 'NF > 1{ system("date -d @" $2) }'
Удаление цветов одновременно с сбросом делает эту задачу более сложной; Я подозреваю, что вы можете контролировать / регулировать это, удалив конечные включенные escape-последовательности, которые относятся к части timestamp .
На всякий случай perl - вариант для вас:
#!/usr/bin/env perl
# saved lines to print out
my @out = ();
# should we save lines?
my $saving = 0;
while (<>) {
if (/abc/) {
if ($saving) {
# this is the second /abc/, so dump what we were saving and start over
@out = ($_);
} else {
# this is the first /abc/, so save it and start saving lines
push @out, $_;
$saving = 1;
}
} elsif (/mno/) {
if ($saving) {
# print what we've saved, plus this /mno/ ending line, then reset
print @out, $_;
@out=();
$saving=0;
}
} else {
# otherwise, save lines if we should be
push @out, $_ if $saving;
}
}
Один из способов сделать это - развернуть файл с помощью tac
, найти совпадения начинающиеся с mno
и заканчивающиеся с abc
, и развернуть их, чтобы получить желаемый результат. У меня получилось следующее:
$ tac test.txt | pcregrep -M 'mno(\n|.)*?abc' | tac
abc
yyy
mno
abc
xxx
mno
(Я использую pcregrep
для многострочного флага -M
)