blog.monophile.net

コンピュータに関するメモ。

著者

山本一彰(Takaaki Yamamoto)

東京工業大学において計算機科学と応用数学を学び、 情報科学芸術大学院大学[IAMAS]においてメディア表現を専攻し修了。 2015年にコンビネータ論理を基に計算完備な計算手法 "論理珠算"を開発し、 それを含む体系である"算道"を構成した。 その成果により、2016年に 第19回 文化庁メディア芸術祭 アート部門 新人賞 (文部科学大臣賞) を受賞。 現在はSRE(サイト信頼性エンジニア)として生計をたててている。

投稿

ANSI エスケープコードによる色を sed で削除する

概要

ANSI エスケープコードというのは文字としては表示されないが仮想端末を制御するもの。 例えば画面をスクロールしたり、カーソルを移動したり。 詳しくは↓のWikipediaをみるとよい。

文字列をカラフルにすることもできる。 CUI 操作では見やすくなってストレスが軽減されるが、 いざ標準出力を違うプログラムに渡すとなると邪魔なので、取り除く方法を調べてみた。

つけるのも面倒臭ければ除くのもめんどくさい。 今回は Linux でも MacOS でも標準で備わっているsedで。 といいつつも Linux と MacOS に標準で同梱されている sed は種類が違うため、注意が必要。

Linuxの場合

Ubuntu 16.04 にインストールされている sed は GNU 製だった↓。

GNU の sed の場合 ANSI の色文字用のエスケープ文字を取り除くには↓で良いらしい。

MacOS の場合

MacOS にインストールされている sed は BSD 系のものだが、バージョンを調べる良い方法が見つからなかった。

BSD な sed の場合 ANSI の色文字用のエスケープ文字を取り除くには↓で良いらしい。

実際に使ってみる

hoge というのを色付き文字で出力する場合、下記のようにすればよい。

hoge

ターミナルではhogeという文字が赤で出力されているはず。

0000000 033   [   3   1   m   h   o   g   e 033   [   m  \n
000000d

hexdump 内容をみるとエスケープ文字がそのまま残っていることがわかる。 ここで、出力をパイプ経由で sed にフィルタリングしてみる。

hoge

出力される文字列自体はhogeで変わりないが、hexdumpで表示するとエスケープ文字が取れていることがわかる。

0000000   h   o   g   e  \n
0000005

めでたしめでたし。

参考