私は最後の3文字を次のように削除できることを知っています:
echo -ne '\b\b\b'
しかし、どうすれば行全体を削除できますか?私は使いたくないということです:
echo -ne '\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b'
...など...長い行を削除します。
\b
または\r
を使用してカーソルを戻し、印刷された文字を新しい文字で上書きできます。 \b
も\r
も印刷された文字を削除しないことに注意してください。カーソルを戻すだけです。 \b
はカーソルを1文字戻し、\r
はカーソルを行の先頭に移動します。
例:両方
echo -e 'foooo\b\b\b\b\bbar'
そして
echo -e 'foooo\rbar'
印刷されます:
baroo
文字を削除したい場合は、次の回避策を使用する必要があります。
echo -e 'fooooo\r \rbar'
出力:
bar
man echo
からの抜粋:
If -e is in effect, the following sequences are recognized:
\0NNN the character whose ASCII code is NNN (octal)
\\ backslash
\a alert (BEL)
\b backspace
\c produce no further output
\f form feed
\n new line
\r carriage return
\t horizontal tab
\v vertical tab
NOTE: your Shell may have its own version of echo, which usually super‐
sedes the version described here. Please refer to your Shell's docu‐
mentation for details about the options it supports.
ターミナルエスケープ を探しています。特に、カーソル位置から行の先頭までをクリアするには:
echo -e "\033[1K"
または、カーソルの位置に関係なく、行のすべて:
echo -e "\033[2K"
また、ターミナルエスケープを使用して、他のあらゆる種類の巧妙なトリックを実行することもできます。
行をクリアしたい場合は、人々が言及している改行とterminfoの組み合わせを使用することをお勧めします。
# terminfo clr_eol
ceol=$(tput el)
echo -ne "xyzzyxyzzy\r${ceol}foobar"
これはxyzzyxyzzy
を書き込んでから、行の先頭に戻り、「行末までクリア」シーケンスを端末に送信してから、foobar
を書き込みます。 -n
は、echoがfoobar
の後に改行を追加しないようにします。
あなたは明示的にecho
を要求しますが、この要求はあなたを固定します。 bashの組み込みprintf
コマンドとブレース展開を使用するアプローチは次のとおりです。
printf 'fooooooooo' # 10 characters
printf '\r'; printf ' %0.s' {0..9} # 10 expansions of the space character
echo -en "\r"
の代わりに、printf "\r"
コマンドも役立つかもしれません。この方法で文字列をフォーマットできます。例えば。:
for sec in {1..100}; do printf "\r %04d" ${sec}; sleep 0.1; done
私は通常、リストを作成せずに現在進行中のファイル名を表示するために遅いファイル解析で操作するときにもそれを行います
質問は完全な行を削除することなので
以下のコマンドをecho
とsed
を組み合わせて使用して、行を削除しました
コマンドの実行後、結果は空になります。
コマンド
echo "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b" | sed -r "s/.*//g"