たとえば、プロセスの色で区切られた出力をパイプしたい場合があります。 grep... しかし、別のプロセスにパイプする場合、たとえば。 sed、カラーコードがありません...
このコードをそのまま維持する方法はありますか?
以下は、カラー出力が欠落している例です。
echo barney | grep barney | sed -n 1,$\ p
答え1
カラー出力を生成する多くのプログラムはTTYに書き込んでいるかどうかを検出し、そうでない場合はカラーをオフにします。これは、テキストだけをキャプチャしたい場合は、カラーコードが面倒で自動的に「正しいことをする」ためです。
これらのプログラムでカラー出力をキャプチャする最も簡単な方法は、TTYに接続していなくてもカラーを書き込むように指示することです。このオプションがあるかどうかを確認するには、プログラムのマニュアルを読んでください。 (たとえば、オプションがgrep
あります--color=always
。)
また、使用することができますexpect
スクリプトunbuffer
次のように擬似ttyを作成します。
echo barney | unbuffer grep barney | sed -n 1,$\ p
答え2
これは私にとって効果的でした;-! (現在のMingW環境で)
echo barney | grep --color=always barney | sed -n '1,$p'
**barney**
#バーニーは赤いテキストで表示されます。
$ grep --version
GNU grep 2.5.4
$ sed --version
GNU sed version 4.2.1