Если это Solaris 11.3 (и я предполагаю, что вы используете самую последнюю версию,когда это новая сборка )вы можете использовать passwd -p, вам нужно просто проверить совместимость хеширования и использовать правильный идентификатор алгоритма хеширования в начале между двумя $ $...(http://docs.oracle.com/cd/E19253-01/816-4557/concept-23/index.html)
Если у вас установлены и perl
, и Date::Parse
perl-модуль, вы можете сделать это с помощью:
perl -MDate::Parse -F, -a -n -e \
'BEGIN { $start=time() - 600 ; $p=0};
if ($p) { print } else {
$logtime = str2time($F[0]);
$p=1 if ($logtime >= $start)}' /path/to/logfile
Этот лайнер perl one -предполагает, что разделителем поля -между временной меткой файла журнала и остатком данных является запятая(-F,
)и используется параметр perl auto -split(-a
)для автоматического разделения каждой входной строки. в массив @F
.
Он использует переменную $p в качестве переключателя для включения или выключения печати, по умолчанию выключено (0 ). Если $p включен, то напечатайте текущую строку, в противном случае используйте функцию Date::Parse
's str2time()
для преобразования временной метки записи журнала в значение времени _t (секунд синуса эпохи, 1970 -01 -01 00 :00 :00 ), а затем проверьте, соответствует ли отметка времени строки журнала >= желаемому времени начала (600 секунд, 10 минут назад ). Если это так, установите $p на (1 ).
Если у вас есть более сложные требования, вероятно, лучше написать отдельный сценарий Perl, а не пытаться сделать это в виде одной -строки -редактирование в командной строке bash — это PITA по сравнению с использованием текстового редактора..Вы можете начать с переделки вышеуказанного вкладыша -:
#!/usr/bin/perl
use Date::Parse;
$start = time() - 600;
$p = 0;
while (<>) {
if ($p) {
print
} else {
my (@F) = split /,/;
my $logtime = str2time($F[0]);
$p = 1 if ($logtime >= $start);
}
}
напр. было бы довольно легко изменить этот скрипт, чтобы он брал время начала из первого аргумента командной строки, вместо того, чтобы жестко -закодировать его на -600 секунд.
Это можно было бы сделать в awk
вместо perl, но Perl-модуль Date ::Parse хорош и прост в использовании, намного проще, чем писать код для разбора даты в awk. Дата ::Parse легко устанавливается из CPAN и доступен для некоторых дистрибутивов Linux (, например. в пакете libtimedate-perl
на Debian ).
Тот же самый базовый алгоритм может быть написан на Python или любом другом языке с приличной функцией анализа даты.