Почему комбинация tail + grep + cut не работает?

Я хотел, чтобы grep некоторые журналы, а хвост их, и печатать только часть каждой строки, так как строки слишком длинны.

Я не могу понять, почему комбинация, которую я использую, не работает; процедура следующая:

echo 'Jun 29 16:27:00 someip rails[pid]: Killed a transaction Jun 29 16:28:00 someip rails[pid]: Killed a transaction' > /tmp/test # Shows the lines tail -f /tmp/test | grep Killed # Shows the lines grep Killed /tmp/test | cut -c -43 # Shows the lines cat /tmp/test | grep Killed | cut -c -43 # Doesn't show them tail -f /tmp/test | grep Killed | cut -c -43 

Почему последняя комбинация не работает?

  • Интерактивный, скрытый живой хвост из нескольких файлов?
  • Проверьте, является ли условие awk совпадением в лог-файле
  • Периодически получать новые строки из файла, возможно, зависания
  • Команда для удаления первого N числа строк на входе
  • tail -f не выводит результат в live CD на Ubuntu
  • После виртуального файла?
  • Получение переходного PID из входа в поиск PS до его смерти
  • Греп от конца файла до начала
  • One Solution collect form web for “Почему комбинация tail + grep + cut не работает?”

    Как отмечается в комментариях, проблема связана с буферизацией. Что вы можете сделать, так это запустить команду с stdbuf как показано здесь .

     stdbuf -i0 -o0 -e0 tail -f /tmp/test | grep Killed | cut -c -43 

    На стороне примечания, вы, вероятно, могли бы избавиться от grep и cut трубопровод и использовать:

     stdbuf -i0 -o0 -e0 tail -f /tmp/test | awk '/Killed/{print substr($0,length($0)-43)}' 
    Linux и Unix - лучшая ОС в мире.