エクスポートすると、zypper --no-color update -y
まだANSIコードを見ることができます。以下はログの例です。
Retrieving package glibc-extra-2.31-150300.41.1.x86_64 (11/460), 64.6 KiB( 27.7 KiB unpacked)
←[2K
Retrieving: glibc-extra-2.31-150300.41.1.x86_64.rpm --------------------------------------------------------------------------------------------------[starting]
←[2K
Retrieving: glibc-extra-2.31-150300.41.1.x86_64.rpm ---------------------------------------------------------------------------------------------[\ (1.1 KiB/s)]
←[2K
Retrieving: glibc-extra-2.31-150300.41.1.x86_64.rpm ..........................................................................................[done (1.1 KiB/s)]
Retrieving package gtk3-data-3.24.34-150400.3.3.1.noarch (12/460), 111.5 KiB( 7.3 KiB unpacked)
←[2K
空行にのみANSIコードが含まれていることは注目に値します。この--no-color
オプションがないと、各行の先頭と末尾にさらに多くのコンテンツが含まれます。
すべてのANSIコードを完全に削除するにはどうすればよいですか?
答え1
このzypper
ユーティリティは使用しないでください。どの端末が「愚かな端末」(TERM=dumb
)または出力が非端末にリダイレクトされている場合はANSIエスケープです。残念ながら、「ログ」を生成する方法は明確ではありません。関連情報で質問を更新してください。
以下の回答では、あなたのバージョンに問題があると仮定zypper
し、非端末に出力を書き込まないという事実を無視しています。
\033[2K
脱出が使われているので現在の行を削除(EL
色に関係なく「行を消去する」コード)どの出力を取得したいのか完全には明確ではありません。これは、エスケープ文字を削除すると、行の文字が消去されないままになる可能性があるためです。
\033[2K
エスケープを削除するには、次のものを使用します。
e2k=$( printf '\033[2K' )
your command | sed "s/$e2k//g"
このエスケープシーケンスを含む空の行(出力行のすべての項目も削除されます)後ろにエスケープコード):
e2k=$( printf '\033[2K' )
your command | sed "s/.*$e2k.*//"
カーソルは移動されない\033[2K
ため、より複雑なアプローチでは現在のカーソル位置を計算し、その点までの行だけを消去する必要があります。
あなたはできますすべてのANSIコードを削除ただし、その一部はカーソル位置決めなどの操作に使用されるため、各コードに置き換える内容を指定する必要があります。それ以外の場合は、より歪んで理解しにくいテキストファイルになる可能性があります。この場合、興味のある唯一のコードは、この回答で言及されているコードです。