Сценарий Bash не совсем совпадает - PullRequest
2 голосов
/ 02 марта 2010

Я хочу отследить журнал apache и затем вывести результат в файл. Я хочу сопоставить день / месяц в журнале Apache с текущей / предыдущей датой, однако, похоже, я делаю это неправильно.

Пример из журнала Apache: 62.173.92.62 - - [02 / Mar / 2010: 15: 46: 58 +0000] "GET /img.......

Текущий скрипт:

cat access_log | grep "\[+%d+/%b" > email.log

То, что я надеялся, соответствовало бы [0/2Mar части строки, однако я ничего не получаю в email.log (разрешения в порядке).

Спасибо

Ответы [ 4 ]

3 голосов
/ 02 марта 2010

Попробуйте вместо этого, вам нужно вызвать date и передать его вывод в шаблон. Также [ необходимо экранировать.

grep "\[$(date +%d/%b/%Y)"
0 голосов
/ 03 марта 2010

для текущего

grep "\[$(date +%d/%b/%Y)" file > email.log

за предыдущий

grep "\[$(date +%d/%b/%Y -d 'yesterday')" file > email.log

Нет необходимости, кот.

0 голосов
/ 02 марта 2010

Попробуйте что-то вроде:

day=`date +%d`
mon=`date +%b`
grep "\[$day/$mon/" access_log
0 голосов
/ 02 марта 2010

grep не работает таким образом; его не волнует текущая дата, он использует регулярное выражение, которое вы передаете вслепую. Используйте date в соответствующем формате, чтобы получить значение, которое вам нужно, и используйте его с grep.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...