ログを「非ANSI化」する方法は?


10

最近、コマンドラインツールでは、ログ出力に派手なANSI色を使用する傾向があります(たとえば、NPMと多くのnodejsベースのツール、rvm、docker、およびその他のいくつかの「モダン」ツール)。

これにより、画面(*)で読むのは便利ですが、出力をログファイルにパイプしたり、さまざまなリモート実行ツールやWebベースの監視ソリューションのようにANSIを適切に処理しないトランスポートを介して送信したりする場合は、あまり良くありません。より成熟したツールの多くは、少なくとも出力がTTYでなく、色が無効になっていることを検出する良識を持っていましたが、これらの新しい「ユーザーフレンドリーな」CLIではできませんでした。これにより、パイプでANSI色を取り除こうとしましたさらに別のプロセスによる出力。

出力をsed-ingするs/\x1B\[[0-9]*\w//gことは仕事を成し遂げたようですが、よりクリーンなアプローチは正規表現を私のすべてのスクリプトに貼り付けるだけですか?

(*)少なくとも、ツールが暗い背景の端末で暗い赤でエラーを表示しようとするまで。


2
参照:unix.stackexchange.com/questions/14684/... - unix.stackexchange.com/questions/111899/... stackoverflow.com/questions/17998978/... superuser.com/questions/380772/... - 4+質問間のオーバー3つのサイトにまたがる3年のスパンでは、正規表現の置換/削除を行うツールを使用するための答えしか得られていません。何より良いものはないと思います。
Zoredache

議論の対象と思われるのは、どの正規表現がどの状況に最適かということだけです。
Zoredache 2015年

1
is there a cleaner approach then just copy pasting regular expressions into all of my scripts?-クリーンアップフィルターを '/ usr / local / bin / stripttycolor.sh`などのファイルに保存しますか?そうすれば、正規表現を単一の場所に制限できますか?
Zoredache

3
出力をファイルに書き込むことがわかっている場合、(少なくともNPMの場合)最も簡単なことは、--no-colorフラグを指定して実行することです。他の多くのコマンドにも同様のフラグがあります。
Moshe Katz

@MosheKatz:残念ながら、たとえばすべてのコマンドが実行できるわけではありませんbower
ガス、2015年

回答:


1

「ansifilter -p」が役立つかもしれません...

Fedoraリポジトリにあります。-pはプレーン出力を指定します:

Name        : ansifilter
From repo   : updates
Summary     : ANSI terminal escape code converter
URL         : http://www.andre-simon.de/doku/ansifilter/ansifilter.php
License     : GPLv3+
Description : Ansifilter handles text files containing ANSI terminal escape codes.
            : The command sequences may be stripped or be interpreted to generate formatted
            : output (HTML, RTF, TeX, LaTeX, BBCode).

うまく機能し、Ubuntu用にパッケージ化する必要があります:-)
Guss
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.