2017-06-12 8 views
0

を除外する私は"ETH - Total Speed"を含む最新の行を取得するには&尾をgrepを使いたいだろうが、出力のみのような126.291がログに手紙

20:01:59:008 46ffd700  ETH - Total Speed: 126.291 Mh/s, Total Shares: 33, Rejected: 0, Time: 00:09 

などの線があります

これはどのように達成できますか?

+0

後にファイルの読み取りを停止 - PCRE

  • -m 1を可能にしますか? 'tac + sed'は' grep'よりも簡単です。 – Sundeep

  • +0

    tail -f〜/ mine.logのさまざまな組み合わせ| grep、それはsedでどうやってやるの? – sealfab

    +0

    質問の数行以上のサンプルを追加し、その出力を期待してください...コメントの代わりに疑問を抱いたものを追加してください。あなたは 'tail -f'を使っているので、何を提案するのか分かりません。あなたはバッファリングも処理する何らかの解決策が必要です。https://stackoverflow.com/questions/13858912/piping-tail-output-though-grep-twice – Sundeep

    答えて

    0

    のは、我々は出力に最初にマッチした「ETH - 合計スピード」としましょう、最後の20行の中で*値を、ファイルが成長しながら、これを実行します。

    tail -f -n 20 logfile | grep --line-buffered -Po -m 1 'ETH - Total Speed: \K\S+(?= Mh/s)' 
    

    結果は以下のように印刷する必要があります。

    126.291 
    

    詳細

    • --line-buffered - 出力時にラインバッファリングを使用します。これは、パフォーマンスの低下
    • -Pを引き起こす可能性があります - あなたがこの問題を解決しようとしたものを第一のマッチングライン

    +0

    これは期待される出力を与えます。私がこれを使用しようとしているのは、カスタムのzabbix項目です。ターミナルで実行されると、ログに次回ログオンするまで待ってからzabbixエージェントを実行するとタイムアウトします。次の一致が発生するまで待機するのではなく、最後に見つかった一致をどのように出力できますか? – sealfab

    +0

    ログには一致が含まれていない行が20行以上累積される可能性があるので、-nオプションはこの動作の原因と考えています。私はtac logfileを使って動作させました。 grep -Po 'ETH - 合計速度:\ K \ S +(?= Mh/s)' | head -1私は今のところtacを使うことができますが、これをtailで行う方法はありますか? – sealfab

    +0

    ありがとう、あなたは私がそれが同じものだったと思ったのは "最後に見つかった"と "最近の"の違いを理解するのを助けることができます – sealfab