хвост файл журнала, но показать только определенные строки

Я отслеживаю файл журнала с флагом -f. Затем я добавляю это в grep, чтобы найти только строки, содержащие «X». Это прекрасно работает. Теперь я хочу снова передать это в другой grep, который удалит все строки, содержащие «Y». Когда я добавляю второй канал, файл перестает обновляться, и похоже, что данные не поступают.

Это команда, которая работает: tail -f my_file.log | grep "X"

Эта команда не работает: tail -f my_file.log | grep "X" | grep -v "Y"

Как мне структурировать ее так, чтобы команда работала?

28
задан 13 October 2015 в 17:36

3 ответа

Поскольку продукция grep буферизована, используйте --line-buffered выбор grep, чтобы позволить буферизующую линию:

tail -f /path/to/log | grep --line-buffered 'X' | grep -v 'Y'

, Если Ваш grep не имеет выбора, Вы можете использовать stdbuf в качестве альтернативы:

tail -f /path/to/log | stdbuf -oL grep 'X' | grep -v 'Y'
0
ответ дан 14 October 2015 в 03:36
  • 1
    ** В ответ с Вашей второй фиксацией (smbclient-L человечность) это придумывает ' ПРЕДУПРЕЖДЕНИЕ " syslog" опция является deprecated' - то же самое подошло, когда я выполнил ' testparm'----Тогда я вставил пароль тогда, он придумал, см. ссылку - [ссылка] ( drive.google.com/open?id=0B-_fOoX3f0J-LWdrUzdLS25CU0E ) – Nicolas Hanna 3 January 2017 в 10:57

Другой подход должен был бы использовать сингл grep просьба вместо два и тем самым избежать буферизующей проблемы. Просто используйте регулярные выражения, который соответствует линиям, состоящим из 0 или больше non-Y знаков, затем X и затем 0 или больше non-Ys снова до конца линии»

tail -f /path/to/log | grep '^[^Y]*X[^Y]*
0
ответ дан 14 October 2015 в 03:36
  • 1
    Ваш локальный путь (/server/nic) не имеет никакого влияния на кого-то/удаленных пользователей. Им просто нужно Ваше имя компьютера (человечность?) и сетевое имя (nic). – jameslol 4 January 2017 в 20:11

Я обычно нахожу более полезными awk для подобных логических проверок:

tail -f /path/to/log | awk '/X/ && !/Y/'
#                           ^^^    ^^^^
#                   this I want    but not this

Проверенный при наличии двух счетов, того, в котором я продолжаю писать seq 20 >> myfile и другой, имеющий, например tail -f myfile | awk '/3/ && !/13/'.

0
ответ дан 14 October 2015 в 03:36
  • 1
    И с Вашим третьим это didn' t работают спасибо – Nicolas Hanna 3 January 2017 в 10:59

Другие вопросы по тегам:

Похожие вопросы: