\b
文字は、新しい行が決して印刷されないように現在の行を変更しています。あなたは、その種の入力でsedのような行ベースのストリームエディタを使用して、箱からすぐに大した成功を収めるつもりはありません。
mkvmerge
がこの種の出力を生成している場合は、最初に他の種類の進捗インジケータ(改行を出力するもの)を使用するスイッチを探してみてください。それが動作しない場合は、改行でバックスペースを交換しようとすることができ
:
(echo -en "Progres: 0%" ; sleep 1 ; echo -en "\b\b25%" ; sleep 1 ; echo -en "\b\b\b50%" ; sleep 1 ;
echo -en "\b\b\b75%" ; sleep 1 ; echo -e "\b\b\b100%") | tr '\b' '\n'
はstdbuf
を使用して、いくつかのアンバッファリングを追加し、我々がそこにいるようで、少なくともあなたの例のために:
(echo -en "0%" ; sleep 1 ; echo -en "\b\b25%" ; sleep 1 ; echo -en "\b\b\b50%" ; sleep 1 ;
echo -en "\b\b\b75%" ; sleep 1 ; echo -e "\b\b\b100%") | stdbuf -i0 -o0 -e0 tr '\b' '\n' |
stdbuf -i0 -o0 -e0 sed -e 's/Progress: //' -e 's/%//' -e 's/\(....\)\(..\)\(..\)/\1-\2-\3/'
出力はstdbuf
のおかげで生成されたように画面に表示されました(私はいくつかの偽の改行を整えました)。
0
25
50
75
100
ええ、これはかなり難しいと思っていましたが、エドゥアルドはすぐに回答を得ました:-)。 – sup