Como seguir e procurar em um arquivo sendo canalizado através de um filtro, em menos

4

Basicamente, desejo procurar, pesquisar e seguir um arquivo de log crescente depois de passá-lo por meio de um sed filter . Achei que precisava seguir um arquivo com tail -f canalizando para sed e depois canalizar isso para less . Para testar, tentei primeiro combinar tail -f e less +F sem sucesso:

  • tail -f file | less +F - less não roda antes de pressionar Ctrl + C para parar o seguimento da cauda. less options -B -b 1 não ajuda.
  • less +F -f <(tail -f file) exibe o mesmo comportamento.

Se alguém souber uma solução melhor / mais simples do que eu descobri no final, agradeceria.

    
por Irfy 25.06.2013 / 16:40

1 resposta

1

Como a tubulação não funcionava diretamente, tentei conectar tail -f , sed e less +F por meio de um arquivo temporário. Terminou com o seguinte

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"
}

que faz o trabalho, embora seja mais complicado do que eu gostaria. Observe que meu SunOS tail não entende --pid , então eu mato manualmente o tail pipeline.

    
por 25.06.2013 / 16:40

Tags