シェル芸160本ノック解答例 その9
技術評論社から出版された『1日1問、半年以内に習得 シェル・ワンライナー160本ノック』の解答例です。
- 解答例の範囲: 問題81〜問題90
- 前回の解答例: シェル芸160本ノック解答例 その8
問題81
$ perl -C -lnE 's/^\x{FEFF}/[BOM]/;say' bom.txt
[BOM]ボムボムプリンおいしい
$ perl -C -lnE 's/^\x{FEFF}/[BOM]/;say' nobom.txt
ボムボムプリン完売
問題82
$ split -b1000 --numeric-suffixes=1 image.bmp image.bmp.
# 確認
$ ls -al image.bmp.??
-rw-r--r-- 1 mitsuhisa mitsuhisa 1000 11月 5 18:00 image.bmp.01
-rw-r--r-- 1 mitsuhisa mitsuhisa 1000 11月 5 18:00 image.bmp.02
-rw-r--r-- 1 mitsuhisa mitsuhisa 1000 11月 5 18:00 image.bmp.03
-rw-r--r-- 1 mitsuhisa mitsuhisa 1000 11月 5 18:00 image.bmp.04
-rw-r--r-- 1 mitsuhisa mitsuhisa 1000 11月 5 18:00 image.bmp.05
-rw-r--r-- 1 mitsuhisa mitsuhisa 1000 11月 5 18:00 image.bmp.06
-rw-r--r-- 1 mitsuhisa mitsuhisa 1000 11月 5 18:00 image.bmp.07
-rw-r--r-- 1 mitsuhisa mitsuhisa 1000 11月 5 18:00 image.bmp.08
-rw-r--r-- 1 mitsuhisa mitsuhisa 1000 11月 5 18:00 image.bmp.09
-rw-r--r-- 1 mitsuhisa mitsuhisa 1000 11月 5 18:00 image.bmp.10
-rw-r--r-- 1 mitsuhisa mitsuhisa 1000 11月 5 18:00 image.bmp.11
-rw-r--r-- 1 mitsuhisa mitsuhisa 1000 11月 5 18:00 image.bmp.12
-rw-r--r-- 1 mitsuhisa mitsuhisa 426 11月 5 18:00 image.bmp.13
問題83
$ sed 's/[\x5C]/\\&/g' soleil.bash > new_soleil.bash
$ bash ./new_soleil.bash | iconv -f SJIS -t UTF-8
親戚のソレイユちゃんは表情が豊かで可愛い女の子。
問題84
$ zcat newline.txt.gz | perl -0777 -nE '$l=()=/[^\r]\n/g;$c=()=/\r\n/g;say "LF $l\nCRLF $c"'
LF 8
CRLF 8
問題85
$ echo 🍑 🍓 | ruby -ane 'puts [($F[0].ord+$F[1].ord)/2].pack("U")'
🍒
問題86
$ uconv -x 'NFKD;ASCII' fractions | tr ' ' + | gp -fq
131/72
問題87
$ sed -E 's/[0-9]{7} ?//g;s/ /\n/g;1s/^/obase=16;ibase=8;/' oct.txt | bc | sed -E 's/^/0/;/.{5}/s/0//;s/(..)(..)/\2\1/' | xxd -p -r
秒速で10円稼ぐ秘密
問題88
$ cat image_masked.bmp | od -An -tx1 -v -w3 | tail -n$((64*64)) | ruby -ane 'BEGIN{b=""};b<<$F[0].to_i(16).to_s(2).slice(-1);END{puts b.to_i(2).to_s(16)}' | xxd -p -r
Hello, 私だ。
以下は私の個人情報だ!!
絶対に漏らすなよ!!!
銀行口座の暗証番号: 6553
クレジットカードの暗証番号: 1145
電話番号: 123-1111-2222
ラッキーナンバー: 8931
好きな食べ物: 豚塩豚テキ定食
好きなスナック: ポテトチップス
行きつけのスナック:
店名: スナック 結
ママ: ユイ
人生: 両親富豪->高等学校退学->結婚出産->旦那浮気
座右の銘: 安全第一
口癖: めちょっく
問題89
$ base64 -d ctf-data | gunzip > ctf.o && objdump -j .rodata -s ctf.o | sed '1,/:$/d;s/ ...0//' | grep -Po [0-9a-f]{2} | awk '/^[^01]/{printf "%02x",strtonum("0x" $1)-($1=="20"?0:2)}' | xxd -p -r
FLAG is shell-gei
問題90
$ printf '0x%x\n' $((4#12+8#34+16#56))
0x78
# `ruby`を使った別解
$ ruby -e 'puts "0x"+("12".to_i(4)+"34".to_i(8)+"56".to_i(16)).to_s(16)'
0x78
Written on November 11, 2022