フィルタを通過したファイルをより少ない方法で追跡して検索する方法

フィルタを通過したファイルをより少ない方法で追跡して検索する方法

デフォルトでは、増加するログファイルを探して検索して追跡したいと思います。sedフィルター後。テストtail -fするために最初に組み合わせsedless試みましたが、役に立ちませんでしたtail -fless +F

  • tail -f file | less +FCtrl- +を押してC尾の追跡を停止するまでlessは実行されません。lessオプションは-B -b 1役に立ちません。
  • less +F -f <(tail -f file)同じ振る舞いをしています。

私が思ったよりも良くて簡単な解決策を知っている人がいたら、とても感謝します。

答え1

直接配管ができず、一時ファイルで接続してみましたtail -f。ついに次のような結果が出ましたsedless +F

function lessx {
    [ -f "$1" ] || { echo "First argument must be a file"; return 1; }
    local tmpfile=$(mktemp /tmp/"$(basename "$1.XXX")")
    [ -f "$tmpfile" ] || { echo '`mktemp` failed'; return 1; }
    tail -f "$1" | stdbuf -i0 -o0 sed 's:\\\?\\n:\n:g' > "$tmpfile" &
    less +F "$tmpfile"
    kill %% # kill the tail pipeline, after less exits
    rm "$tmpfile"
}

私が望むものよりも複雑ですが、これは行われます。私のSunOSはtailそれを理解していないので、パイプを手動で--pidシャットダウンします。tail

関連情報