はじめに
小ネタ。
シェルスクリプトでFizzBuzzを書いたらどんなふうにかけるかを試してみました。
検証環境
1
2
3
4
5
| $ bash -version | head -n 1
GNU bash, バージョン 5.0.7(1)-release (x86_64-apple-darwin18.5.0)
$ sed --version | head -n 1
sed (GNU sed) 4.7
|
結果
1
| $ seq 30 | sed '0~3s/[0-9]*$/Fizz/' | sed '0~5s/[0-9]*$/Buzz/'
|
実行結果は以下の通り。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
| 1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
Fizz
19
Buzz
Fizz
22
23
Fizz
Buzz
26
Fizz
28
29
FizzBuzz
|
解説
はじめの seq は数字を列挙するために利用しています。
1
2
3
4
5
6
7
| # 1から5までを出力
$ seq 5
1
2
3
4
5
|
30までの出力内容を後続する sed コマンドに引き渡しています。
sed では、 s内部コマンド で数値を除去しつつ行末に文字列を追加しています。s の前方に対象行の指定を行っています。- 2つの
sed コマンドはそれぞれ「先頭行から3行ずつ」、「先頭行から5行ずつ」処理を行っています。
ひとこと
ただただ楽。