Как включить команду perl в sed? - PullRequest
2 голосов
/ 29 февраля 2012

У меня есть файлы журналов, которые мне нужно вырезать, которые выводят DD-MM-YYYY ЧЧ: ММ: СС в каждой строке В идеале я хотел бы, чтобы последние 10 минут такого файла.

У меня есть команда perl, чтобы узнать время 10 минут назад:

perl -e 'use POSIX qw(strftime); print strftime "%e-%m-%Y %H:%M:%S",\ localtime(time()- 600);'

Пример вывода: 29-02-2012 16:38:14

и команда sed, чтобы вырезать файл. Это работает с ручной датой и системным временем теперь как вторая переменная. Я не могу использовать более продвинутые функции даты, так как я использую Solaris 8 и оболочку c.

sed '1,/29-02-2012 16:07/d;/=$(date +%d-%m-%y %H:%M:%S")/,$d' debug.log | tee cut-log | less

Любая помощь приветствуется ...

Ответы [ 2 ]

2 голосов
/ 29 февраля 2012

Просто сделайте все это в perl, используйте оператор ...Что-то вроде

perl -MPOSIX -n -e 'print if /@{[ strftime "%e-%m-%Y %H:%M:%S",\ localtime(time()- 600) ]}/ .. /@{[ strftime "%e-%m-%Y %H:%M:%S",\ localtime(time()) ]}/ '

Редактировать: плохая вставка кода.Я исправил это.

1 голос
/ 29 февраля 2012

$(date) не раскрывается в одинарных кавычках.Изменить на двойную кавычку.

sed "1,/29-02-2012 16:07/d;/=$(date +'%d-%m-%y %H:%M:%S')/,\$d"
...