ShellScript
Bash
Zsh
sed
ANSI

カラー表示される標準出力からカラーを除く

方法

カラー表示される標準出力からカラーを除く

コマンド | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[mGK]//g"

出力をパイプで繋いで色を表してる[33mとかをsedで消す。

alias登録

zsh

~/.zshrcにグローバルエイリアスとして登録

.zshrc
% alias -g I='| sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[mGK]//g"'

bash

bash派の人は~/.bashrcにaliasを登録

.bashrc
$ alias ic='sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[mGK]//g"' 

zshで% ls --color Iやbashで$ ls --color | icなどと打ってみて確かめてください。

補足

よく設定されているalias

よくあるshell上では最初から

alias ls='ls --color=auto'

などと最初からカラー表示で設定してあると思うので、わざわざ--colorなんてオプションはいらないのですが念の為。

aliasの回避としてバックスラッシュ

以上のようなaliasが登録されている環境でlsをカラー表示したくないならlsの前にバックスラッシュをつけて\lsとすればaliasを無視して本来のlsが使えます。
ここでわざわざlsを例にあげているのは単純にみんな知っているコマンドだからです。

今回この記事を書くキッカケとなった自作コマンド([git ailias]本日のまとめログと最後のタグからのコミットログ、その他参照)がカラー表示で、lsのようにcolorオプションがあるわけではないので、一時的にカラー表示を無効化したい時にと思って何か方法がないか調べたまででした。

参考

参考というか丸パクリ: Stack over flow - Removing colors from output
日本語記事で存在しなかったのでここにメモしておきます。

以上