シェル芸160本ノック解答例 その8

技術評論社から出版された『1日1問、半年以内に習得 シェル・ワンライナー160本ノック』の解答例です。


問題71

$ grep -o . uni.txt | LANG=C awk '{print $0,length}'
a 1
± 2
運 3
🎂 4

問題72

$ echo -e "\U1F363\U1F37A"
🍣🍺

# `raku`(旧称`perl6`)を使った別解
$ raku -e 'say "\c[SUSHI,BEER MUG]"'
🍣🍺

問題73

# ワンライナー実行前:
$ ls -1
''$'\202''ҁ['$'\202''Ł['$'\202\246\202\323''.pdf'
''$'\223''|'$'\227\247\225''ϑԐa'$'\216''m'$'\202''̔閧.txt'
秘密の圧縮ファイル.zip

# 解答例のワンライナーを実行:
$ ls | grep -av '\.zip$' | while read f; do printf "mv '%s' '%s'\n" "$f" "$(nkf -wxLu <<<"$f")"; done | sh

# ワンライナー実行後:
$ ls -1
ぴーでーえふ.pdf
倒立変態紳士の秘密.txt
秘密の圧縮ファイル.zip

問題74

$ date -f <(sed 's/[年月]/-/g;s/日//' days.txt) +%Ex | sed 's/0\(.\)/\1/g'
平成31年3月3日
令和元年1月1日
令和2年8月1日

問題75

$ perl -C -lnE 's/[\p{ExtPict}\p{Join_C}\p{VS}]//g;say' minutes.txt
# 本日のミーティングの議題

* 今月の売り上げ
* 新商品の報告(山田さん)
* 研究開発の進捗

...

問題76

$ diff <(nkf --ic=UTF8-MAC mac_ls_old.txt) mac_ls_new.txt
2d1
< バナザード.txt

問題77

$ for f in meme_*; do grep -aH . $f | nkf; done | grep 山田 | sed 's/:.*//'
meme_euc
meme_utf8

問題78

$ grep -Po '\p{Han}' sample_novel.txt | grep -vf jouyou_kanji.txt
智
皰
噛
云
鴎

問題79

$ f=message.txt; iconv -l | while read c; do iconv -f $c $f &>/dev/null && { echo "始$c"; iconv -f $c $f; echo "終$c"; } done | perl -C -Mutf8 -0777 -nE '@m=(/(始(.+?)\n[\p{Han}\p{Hiragana}\p{Katakana}\p{P}\n]+\n終\2)/gs);say $m[0]' | sed '1d;$d'
イカれたメンバーを紹介するぜ!
真イカのパプリカソースの修平

以上だ!

ちなみに、message.txtの文字コードはCP930(メインフレームなどで使われるEBCDICベースのIBM漢字コード)のようです。


問題80

$ ruby -lne 'puts [$_.to_i(2).to_s(16)].pack("H*")' zeroone
不労所得
Written on November 5, 2022