Существует ли команда, сочетающая `tee` и `grep`, чтобы в конвейере часть tee могла направлять совпадения в файл?

Вы можете использовать команду loop, доступную здесь , вот так:

$ loop './do_thing.sh' --every 15s --until-success --num 5 

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

1
13.04.2020, 19:19
1 ответ

Предполагая оболочку с заменами процессов,>(...):

tail -f /var/log/syslog | 
tee >(grep cron1 >CRON) | 
tee >(grep cloud-init2 >CLOUD-INIT)

Это приведет к тому, что tailсоздаст данные для первого teeв конвейере. teeбудет дублировать данные и отправлять одну копию следующему tee, а другую — в подстановку процесса. Эта замена процесса будет выполняться grepдля данных, поступающих из tee, и результат будет отправлен в файл CRON.

Последний этап конвейера будет работать аналогичным образом.


В оболочке, где подстановки процессов недоступны, например. Можно использовать /bin/sh, awkили sed.

Сawk:

tail -f /var/log/syslog | 
awk '{ print }
     /cron1/       { print >"CRON" }
     /cloud-print/ { print >"CLOUD-INIT" }'

Сsed(обратите внимание, что мы должны убедиться, что выходные файлы не существуют, поскольку команда wв sedвсегда добавляет данные в файл):

rm -f CLOUD CLOUD-INIT

tail -f /var/log/syslog | 
sed -e '/cloud/w CLOUD' \
    -e '/cloud-print/w CLOUD-INIT'
2
19.03.2021, 02:29

Теги

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