записать в файл после передачи вывода из tail -f через grep - PullRequest
6 голосов
/ 17 марта 2011

Я ищу запись в файл после передачи вывода из tail -f через grep.Скажем, запись в файл "temp" для всех строк с "Playing:" в error_log "FreeSwitch.log".

 tail -f "/var/lof/freeswitch/freeswitch.log" | grep "Playing:" > temp

, но не работает!Это сентос 5,5

Ответы [ 4 ]

13 голосов
/ 17 марта 2011

Может быть, у вас есть проблема с буферизацией?См. BashFAQ: что такое буферизация ?

Вы можете, например, попробовать:

tail -f /var/lof/freeswitch/freeswitch.log | grep --line-buffered "Playing:" > temp
2 голосов
/ 17 марта 2011
-f, --follow[={name|descriptor}]
              output appended data as the file grows;

Сканирует файл по мере его роста. И это процесс с интервалом. Вы можете только прервать это.

Использовать параметр:

-c, --bytes=K
              output the last K bytes; alternatively, use -c +K to output bytes starting with the Kth of each file  

или

-n, --lines=K
              output the last K lines, instead of the last 10; or use -n +K to output lines starting with the Kth

РЕДАКТИРОВАТЬ: как BMK сказал:

grep --line-buffered  

думаю, это поможет вам

1 голос
/ 17 марта 2011

Вы указали имя файла после >?

tail -f /var/lof/freeswitch/freeswitch.log | grep "Playing:" > temp
0 голосов
/ 24 марта 2015

спасибо за вашу помощь.

вот мой код для вставки в MySQL со словом «ошибка»:

tail -f /var/log/httpd/error_log | \
grep -E --line-buffered "error" | \
while read line; do \
#echo -e "MY LINE: ${line}"; done
echo "INSERT INTO logs (logid,date,log) VALUES (NULL, NOW(), '${line}');" | mysql -uUSERDB -pPASSDB DBNAME; done
...