2016-07-07 5 views
0

я пытаюсь отобразить именованный канал в терминале с помощью этой команды:Piping хвост -f перерезать СЭД не производит никакого вывода

tail -f textFile | cut -d " " -f 3- | sed -e "s/a/g&g/"

По какой-то причине это не производит никакого вывода.

Это делает работу, как ожидается, если -f Удалено:

tail textFile | cut -d " " -f 3- | sed -e "s/a/g&g/"

или вырезать заявление удаляется:

tail -f textFile | sed -e "s/a/g&g/"

или СЭД заявление удаляется:

tail -f textFile | cut -d " " -f 3-

Только когда все эти три вещи находятся вместе, он внезапно не производит никакого выхода. Порядок sed и разреза не имеет значения. Все это затрудняет мне винить поведение буферизации ввода или вывода любой одной или пары этих программ.

Возможное решение для получения требуемой функциональности было бы структурой while read line, но я хотел бы избежать инициализации команды для каждой строки, если это вообще возможно.

+0

Предоставьте образцы строк из 'textFile', чтобы выяснить причину! – Inian

+0

Это действительно неважно. В целях тестирования я использую текстовый файл с содержимым: 'aaaaaaaaaaaaaa \ n bbbbbbbbbbbbbbbb' – cyborgx7

+0

Можете ли вы попробовать команду как' tail -f textFile | при чтении текста; do echo "$ text" | cut -d "" -f 3- | sed -e "s/a/g &g/; done'. Потому что, я думаю, это то, как 'tail' и' cut' обрабатывают свои выходные и входные потоки соответственно, я думаю! Поставит его как ответ, если он работает – Inian

ответ

1

Я испытывал нечто подобное с командой ping, которую я хотел отфильтровать.

Следующая веб-страница, кажется, объяснить, что вопрос (STDIO буферизация) команда http://www.pixelbeat.org/programming/stdio_buffering/

Точки сайта на решение, которое включает в себя отключение буферизации с «stdbuf»

tail -f filename | stdbuf -o0 cut -d " " -f 3- | sed -e "s/a/g&g/" 

выше хорошо работает для меня, и удаление «stdbuf -o0» не приводит к отображению вывода.

>stdbuf --help 
Usage: stdbuf OPTION... COMMAND 
Run COMMAND, with modified buffering operations for its standard streams. 

Mandatory arguments to long options are mandatory for short options too. 
    -i, --input=MODE adjust standard input stream buffering 
    -o, --output=MODE adjust standard output stream buffering 
    -e, --error=MODE adjust standard error stream buffering 
     --help  display this help and exit 
     --version output version information and exit 
+0

это прекрасно работает, спасибо – cyborgx7

Смежные вопросы