write to a file after piping output from tail -f through to grep

前端 未结 4 608
孤独总比滥情好
孤独总比滥情好 2021-01-05 15:19

I\'m looking to write to a file after piping output from tail -f through to grep. Say,write to a file \"temp\" for all lines with \"Playing:\" within in error_log \"FreeSwit

相关标签:
4条回答
  • 2021-01-05 15:58
    -f, --follow[={name|descriptor}]
                  output appended data as the file grows;
    

    It scans the file as it grows. And it is a process with an interval. You can only interrupt it.

    Use parameter:

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

    or

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

    EDIT: as bmk said:

    grep --line-buffered  
    

    think it will help you

    0 讨论(0)
  • 2021-01-05 16:00

    Maybe you have an issue with buffering? See BashFAQ: What is buffering?

    You could e.g. try:

    tail -f /var/lof/freeswitch/freeswitch.log | grep --line-buffered "Playing:" > temp
    
    0 讨论(0)
  • 2021-01-05 16:06

    thanks for your help.

    here is my code to insert into mysql with the word "error":

    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
    
    0 讨论(0)
  • 2021-01-05 16:08

    Did you put the file name after the >?

    tail -f /var/lof/freeswitch/freeswitch.log | grep "Playing:" > temp
    
    0 讨论(0)
提交回复
热议问题