C言語のprintfの出力文字を装飾する
C言語プログラムのデバッグをしていると、標準出力と標準エラー出力、もしくはプロセスごとにログの色を変えたり、装飾したいってことがあります。
初回はprintfで出力する文字および背景色の装飾を行います。
実施環境:Ubuntu 18.04.5 LTS コンパイラ:gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0
文字の装飾・色・背景色を変える方法
変えたい文字の前にエスケープシーケンスを使って装飾コードを入れれば見え方が変わります。 見え方を元に戻したい場合は、標準コードを入れれば元に戻ります。
文字の装飾
装飾 | コード | 解説 |
---|---|---|
太文字 | \x1b[1m | |
暗文字 | \x1b[2m | |
下線 | \x1b[4m | |
点滅 | \x1b[5m | |
反転 | \x1b[7m | 文字色と背景色を反転します |
隠れ文字 | \x1b[8m | 文字が見えなくなります |
標準 | \x1b[0m |
printf("\x1b[1m 太文字 \x1b[0m\n"); printf("\x1b[2m 暗文字 \x1b[0m\n"); printf("\x1b[4m 下線 \x1b[0m\n"); printf("\x1b[5m 文字の点滅 \x1b[0m\n"); printf("\x1b[7m 色の反転 \x1b[0m\n"); printf("\x1b[8m 隠れ文字 \x1b[0m <-ここに文字が隠れています\n");
文字色の変更
装飾 | コード | 解説 |
---|---|---|
黒 | \x1b[40m | |
赤 | \x1b[41m | |
緑 | \x1b[42m | |
黄 | \x1b[43m | |
青 | \x1b[44m | |
マゼンタ | \x1b[45m | |
シアン | \x1b[46m | |
ライトグレー | \x1b[47m | |
ダークグレー | \x1b[100m | |
ライトレッド | \x1b[101m | |
ライトグリーン | \x1b[102m | |
ライトイエロー | \x1b[103m | |
ライトブルー | \x1b[104m | |
ライトマゼンタ | \x1b[105m | |
ライトシアン | \x1b[106m | |
標準 | \x1b[49m |
printf("\x1b[40m 黒背景 \x1b[49m\n"); printf("\x1b[41m 赤背景 \x1b[49m\n"); printf("\x1b[42m 緑背景 \x1b[49m\n"); printf("\x1b[43m 黄背景 \x1b[49m\n"); printf("\x1b[44m 青背景 \x1b[49m\n"); printf("\x1b[45m マゼンタ背景 \x1b[49m\n"); printf("\x1b[46m シアン景 \x1b[49m\n"); printf("\x1b[47m ライトグレー背景 \x1b[49m\n"); printf("\x1b[100m ダークグレー背景 \x1b[49m\n"); printf("\x1b[101m ライトレッド背景 \x1b[49m\n"); printf("\x1b[102m ライトグリーン背景 \x1b[49m\n"); printf("\x1b[103m ライトイエロー背景 \x1b[49m\n"); printf("\x1b[104m ライトブルー背景 \x1b[49m\n"); printf("\x1b[105m ライトマゼンタ背景 \x1b[49m\n"); printf("\x1b[106m ライトシアン背景 \x1b[49m\n"); printf("\x1b[49m デフォルト背景 \x1b[49m\n");
背景色の変更
装飾 | コード | 解説 |
---|---|---|
黒 | \x1b[30m | |
赤 | \x1b[31m | |
緑 | \x1b[32m | |
黄 | \x1b[33m | |
青 | \x1b[34m | |
マゼンタ | \x1b[35m | |
シアン | \x1b[36m | |
ライトグレー | \x1b[37m | |
ダークグレー | \x1b[90m | |
ライトレッド | \x1b[91m | |
ライトグリーン | \x1b[92m | |
ライトイエロー | \x1b[93m | |
ライトブルー | \x1b[94m | |
ライトマゼンタ | \x1b[95m | |
ライトシアン | \x1b[96m | |
標準 | \x1b[39m |
printf("\x1b[30m 黒文字 \x1b[39m\n"); printf("\x1b[31m 赤文字 \x1b[39m\n"); printf("\x1b[32m 緑文字 \x1b[39m\n"); printf("\x1b[33m 黄文字 \x1b[39m\n"); printf("\x1b[34m 青文字 \x1b[39m\n"); printf("\x1b[35m マゼンタ文字 \x1b[39m\n"); printf("\x1b[36m シアン文字 \x1b[39m\n"); printf("\x1b[37m ライトグレー文字 \x1b[39m\n"); printf("\x1b[90m ダークグレー文字 \x1b[39m\n"); printf("\x1b[91m ライトレッド文字 \x1b[39m\n"); printf("\x1b[92m ライトグリーン文字 \x1b[39m\n"); printf("\x1b[93m ライトイエロー文字 \x1b[39m\n"); printf("\x1b[95m ライトブルー文字 \x1b[39m\n"); printf("\x1b[96m ライトマゼンタ文字 \x1b[39m\n"); printf("\x1b[97m ライトシアン文字 \x1b[39m\n"); printf("\x1b[39m デフォルト文字色 \x1b[39m\n");
まとめ
注意点として、改行コード(\n)の後に標準コードを入れて背景色を戻した場合、次の行に背景色が残る場合があります。
printf("\x1b[41m 赤背景 \n\x1b[49m"); printf("\n");
今回紹介している方法はC言語としていますが、bashのターミナルに依存しているのでbashの出力(echo)はもちろん、pythonやその他言語でも同じように文字コードを入れてやれば見え方が変わります。