ターミナル上で数値の16進数の変換を行う
- bc コマンド, obase
- カラーコードを、(255,255,255) -> #FFFFFF への変換を行う
bc コマンド
- 基本的な計算をしてくれるコマンド
$ echo '4*5' | bc > 20
- 桁数指定
- デフォルトでは小数点以下切り捨てになるので、
scale
を指定してあげる scale
をつける場所に注意
- デフォルトでは小数点以下切り捨てになるので、
$ echo '1/3' | bc > 0 $ echo 'scale=4; 1/3' | bc > .3333
- 数学ライブラリを用いるとlogの計算などができる
- 詳しくは
man bc | grep '\-l' -A20
などで確認すると良い -l
オプションで指定できる
- 詳しくは
## l(x) = log(x) $ echo 'l(3)' | bc -l > 1.09861228866810969139
bcコマンドを用いた16進数への変換
- obaseを用いる
- output base(出力の基底)を指定できるオプション(?)
- ibase: inputバージョンもある
- 使い方
$ echo 'obase=16; 255' | bc > FF
カラーコードの変換
目標は
(255, 255, 255) -> #FFFFFF への変換を行う
こと
実際の手順
1 ()や,の前後のスペースを取り除く
$ echo "(255, 255, 255)" | tr -d "() " > 255,255,255
2 各々の数字に対して上の"bcを用いた基底変換"を使いたかったので、','で区切って行に変換
$ echo "(255, 255, 255)" | tr -d "() " | tr "," "\n" > 255 > 255 > 255
3 各行に対してbcコマンドを用いて16進数へ変換
$ echo "(255, 255, 255)" | tr -d "() " | tr "," "\n" | xargs -I@ echo "obase=16; @" | bc > FF > FF > FF
4 最後に3行をまとめてあげて、先頭に#をつけたら完成
$ echo "(255, 255, 255)" | tr -d "() " | tr "," "\n" | xargs -I@ echo "obase=16; @" | bc | tr -d "\n" | sed "s@^@#@" > #FFFFFF $ echo "(128, 32, 32)" | tr -d "() " | tr "," "\n" | xargs -I@ echo "obase=16; @" | bc | tr -d "\n" | sed "s@^@#@" > #802020
(おまけ)ファイルから (255,255,255) のようなカラーコードを見つける
$ cat color > (255, 255, 255) is one of the ideal color code. > (2555, 123, 1) is a bad request. > (12,3,6) is also detected. $ cat color | grep -Eo '\([0-9]{1,3},\s?[0-9]{1,3},\s?[0-9]{1,3}\)' > (255, 255, 255) > (12,3,6)