シェル芸160本ノック解答例 その15
技術評論社から出版された『1日1問、半年以内に習得 シェル・ワンライナー160本ノック』の解答例です。
- 解答例の範囲: 問題141〜問題150
- 前回の解答例: シェル芸160本ノック解答例 その14
問題141
$ sqlite3 tmp.sqlite "CREATE TABLE dummy ($(sed -Ez 's/\n$//;s/\n/,/g' tableinfo.txt));" && for i in {1..10}; do sqlite3 tmp.sqlite "INSERT INTO dummy VALUES($i,'x$(faker hexify)','$(faker first_romanized_name)','$(faker domain_word)@dummy.jp');"; done && sqlite3 -csv -header tmp.sqlite "SELECT * FROM dummy;" && rm -f tmp.sqlite
id,user_id,user_name,mail_address
1,x1c81,Mituru,inoue@dummy.jp
2,x55f9,Kana,suzuki@dummy.jp
3,xba38,Chiyo,sato@dummy.jp
4,xc31f,Naoko,kobayashi@dummy.jp
5,xb1d0,Takuma,kimura@dummy.jp
6,x4527,Momoko,maeda@dummy.jp
7,x3a08,Yosuke,watanabe@dummy.jp
8,xb675,Kyosuke,matsumoto@dummy.jp
9,x1896,Manabu,suzuki@dummy.jp
10,xd56d,Minoru,fujita@dummy.jp
なお、ダミーデータは、解答例のワンライナーを実行するたびに異なるものが生成されます。
問題142
$ echo blog.ueda | perl -nE '@b=split "",(join "",map{unpack "B*"}split "");for(0..$#b){$b[$_]=$b[$_]?0:1;say map{pack "B*",$_}(join "",@b)=~/(.{8})/g;$b[$_]=$b[$_]?0:1}' | grep -P '^[a-z.]+$' | xargs
rlog.ueda jlog.ueda flog.ueda clog.ueda bdog.ueda bhog.ueda bnog.ueda bmog.ueda blgg.ueda blkg.ueda blmg.ueda blng.ueda blow.ueda bloo.ueda bloc.ueda bloe.ueda blof.ueda blognueda blog.eeda blog.qeda blog.weda blog.teda blog.uuda blog.umda blog.uada blog.ugda blog.udda blog.ueta blog.uela blog.uefa blog.ueea blog.uedq blog.uedi blog.uede blog.uedc
問題143
# 1. 解答例 - 変更したのにコミットしていないファイルを調査
$ git ls-files -m
B.conf
about_B.md
fileA
fileB
fileC
fileD
# 2. 解答例 - 調査結果から、B関連のファイルを抽出
$ git ls-files -m | grep B
B.conf
about_B.md
fileB
# 3. 解答例 - 抽出したファイルをステージング
$ git ls-files -m | grep B | xargs git add
# `git status`で確認
$ git status
On branch main
Your branch is up to date with 'origin/main'.
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: B.conf
modified: about_B.md
modified: fileB
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: fileA
modified: fileC
modified: fileD
問題144
$ git restore -s HEAD^ -SW css/ img/
# `git diff`で確認
$ git diff HEAD
diff --git a/css/common.css b/css/common.css
index ce7da04..8700243 100644
--- a/css/common.css
+++ b/css/common.css
@@ -1,3 +1,3 @@
p {
- color: blue;
+ color: green;
}
diff --git a/img/banner.png b/img/banner.png
index 7dc3b07..f47f027 100644
Binary files a/img/banner.png and b/img/banner.png differ
diff --git a/img/favicon.ico b/img/favicon.ico
index 14b184f..ebdeacd 100644
Binary files a/img/favicon.ico and b/img/favicon.ico differ
diff --git a/img/picture.jpg b/img/picture.jpg
index af5a386..947afbf 100644
Binary files a/img/picture.jpg and b/img/picture.jpg differ
問題145
$ paste <(git log --pretty='%at' | sed '$d') <(git log --pretty=%at | sed '1d') | awk '{print ($1-$2)/3600}'
19.2283
28.8069
21.1311
(...略...)
2.67583
0.499722
0.0302778
なお、表示されている2コミット間の時間は、2022年12月4日現在のものです(随時更新あり)。
問題146
$ git branch -r --no-merged | xargs -I@ git -P log -1 --format="%cI%x09%an%x09@" @ | dateutils.dgrep -i %FT%T%Z "<=$(dateutils.dadd -f %FT%T%Z now -1mo)"
2008-02-19T02:09:55+00:00 Jeremy Kemper origin/1-2-stable
2009-09-10T17:41:18-07:00 Beau Harrington origin/2-0-stable
2011-01-17T14:14:24+13:00 Michael Koziarski origin/2-1-stable
(...略...)
2022-08-23T14:12:49-04:00 eileencodes origin/use-temp-pool-for-migrations
2021-06-30T18:01:57+09:00 Zachary Scott origin/zzak-patch-1
2016-07-08T04:50:39+09:30 Matthew Draper origin/ಠ_ಠ
なお、表示されている最終更新日時・最終更新者・ブランチ名は、2022年12月6日現在のものです(随時更新あり)。
問題147
$ grep -Po '<td.*?>.*?</td>' page | sed 's/<[^>]*>//g' | mecab -Owakati | sed -Ez 's/ /\n/g;s/\n+/\n/g' | sort | uniq -c | sort -k1,1nr
84 シェル
78 芸
74 が
(...略...)
1 列挙
1 弄ば
1 話
問題148
$ curl -s https://file.ueda.tech/eki/p/14.xml | grep -B1 京急本線 | grep -Po '\d+' | xargs -I@ curl -s https://file.ueda.tech/eki/l/@.xml | grep station_name | sed 's/^[^<]*//;s/<[^>]*>//g'
泉岳寺
品川
北品川
(...略...)
京急大津
馬堀海岸
浦賀
問題149
$ curl -s 'wttr.in/{三島,石廊崎,静岡,浜松}?format=4'
三島: ☀️ 🌡️+9°C 🌬️→35km/h
石廊崎: ☀️ 🌡️+15°C 🌬️→60km/h
静岡: ☀️ 🌡️+7°C 🌬️→25km/h
浜松: ☀️ 🌡️+9°C 🌬️→26km/h
# 気象庁の天気予報JSONデータを利用した別解
$ curl -s https://www.jma.go.jp/bosai/forecast/data/forecast/220000.json | yq -MP '.[0].timeSeries[0].areas[]|{(.area.name):{"天気":.weathers[0],"風":.winds[0],"波":.waves[0]}}'
中部:
天気: 晴れ
風: 西の風 やや強く 海上 では 西の風 強く
波: 3メートル
西部:
天気: 晴れ
風: 西の風 やや強く 海上 では 西の風 強く
波: 3メートル
東部:
天気: 晴れ
風: 西の風 海上 では 西の風 やや強く
波: 1メートル
伊豆:
天気: 晴れ
風: 西の風 やや強く 海上 では 西の風 強く
波: 3メートル
なお、表示されている天気情報は、いずれも2022年12月14日2時現在のものです。
問題150
問題150小問1
$ nkf -wxLu backnumber | grep -B3 品切 | sed 's/<[^>]*>//g' | grep '2020年.\+月号' | tac
Software Design 2020年1月号
Software Design 2020年2月号
Software Design 2020年3月号
Software Design 2020年4月号
問題150小問2
2022年12月14日現在において2020年1月号以降の全バックナンバーが品切状態のため、本来curl -s https://gihyo.jp/magazine/SD/archive/2020/2020[01-12]
である部分をcat 2020
に置き換えて解答しています。
$ cat 2020 | nkf -wxLu | grep -B10 在庫はございません | sed 's/<[^>]*>//g' | grep '2020年.\+月号'
Software Design 2020年1月号
Software Design 2020年2月号
Software Design 2020年3月号
Software Design 2020年4月号
Written on December 14, 2022