>[оверквотинг удален]
>> слова XXX, после чего файл закрывается.
> А теперь давайте перепишем это предложение на шелле:
> tac file | grep -m 1 XXX
> Это если нужна только совпадающая строка. А если нужны все строки от
> совпадающей до конца:
> tac file | perl -ne 'print; exit 0 if m/XXX/;'
> Ну или вместо перла свой любимый скриптовый язык.
> Можно в конце ещё добавить "| tac", чтобы вернуть строки к нормальному
> порядку, но тогда рискуете получить подвисание, если XXX нет (или очень
> далеко от конца) в гигабайтном файле.кстати, как сделать вот в этом примере
perl -ne 'print; exit 0 if m/XXX/;'
в условии что-то типа if(($CurrentDate - $Dateinfile)>300)
те вывести из лог файла, только строчки которые были добавлены за последние 5 минут(300сек.)
$CurrentDate получить не сложно:
$CurrentDate=`date +%s`
а вот с $Dateinfile все намного сложнее, в логе дата имеет формат:
# tac access_log | head -1| awk '{print $4}' | sed 's/\[//;s/:/ /'
30/Oct/2011 20:09:09
и стандартным средством такой формат в юникс формат не сконвертить:
# date --date='30/Oct/2011 20:09:09' +%s
date: invalid date `30/Oct/2011 20:09:09'
изменять формат лога не желательно, всякие стастистики там еще собираются по ним.