Как Вы передаете вход по каналу через grep к другой утилите?

Мы также столкнулись с этой проблемой, но в нашем случае это было потому, что у нас были папки, оканчивающиеся на «.Lib». Понял это из этого SO вопроса: Visual Studio 2015. Файлы не добавлены в TFS

27
задан thecoshman 19 October 2015 в 13:48
поделиться

3 ответа

В моей системе было буферизовано около 8 КБ, прежде чем я получил какой-либо вывод. Эта последовательность работала, чтобы немедленно следовать за файлом:

tail -f logfile | while read line ; do echo "$line"| grep 'org.springframework'|cut -c 25- ; done
11
ответ дан 28 November 2019 в 05:28
поделиться

То, что у вас есть, должно работать нормально - в этом вся идея конвейеров. Единственная проблема, которую я вижу, заключается в том, что в имеющейся у меня версии cut (GNU coreutiles 6.10) вы должны использовать синтаксис cut -c 25- (т.е. использовать знак минус вместо знака плюс), чтобы удалить первые 24 символа.

Вы также ищете разные шаблоны в ваших двух примерах, если это актуально.

-1
ответ дан 28 November 2019 в 05:28
поделиться

Assuming GNU grep, add --line-buffered to your command line, eg.

tail -f logfile | grep --line-buffered org.springframework | cut -c 25-

Edit:

I see grep buffering isn't the only problem here, as cut doesn't allow linewise buffering.

you might want to try replacing it with something you can control, such as sed:

tail -f logfile | sed -u -n -e '/org\.springframework/ s/\(.\{0,25\}\).*$/\1/p'

or awk

tail -f logfile | awk '/org\.springframework/ {print substr($0, 0, 25);fflush("")}'
29
ответ дан 28 November 2019 в 05:28
поделиться
Другие вопросы по тегам:

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