И есть sed, обрабатывающий его вывод:
for i in `seq 5`; do
echo -n "$i"
sleep 2
echo -en '\r'
done | sed -E 's/./X/'
Как мне их подружить? Сейчас sed дожидается '\n' и только после этого печатает что-либо, а я бы хотел, чтобы он печатал текст, не дожидаясь новой строки. Например, чтобы флашил его на каждый'\r', чтобы я видел динамические изменения в прогресс-баре
Универсальный враппер над sed, который учит его работать над динамическим инпутом... dyn_sed() { tru() { stdbuf -o0 tr "$@"; } clr() { sed -ue "s,$,$(tput el),"; } tee > >( tru '\r' '\n' \ | sed -u "$@" \ | clr \ | tru '\n' '\r' tput el ) >( sed -z "$@" ) } Тест: { for i in `seq 5`; do echo -n "$i"; sleep 0.5 echo -en '\r' done echo hello echo hello 123 echo test echo hello world 123 } | dyn_sed -E 's/3|hello/world/g'
Обсуждают сегодня