1年以上前に購入したこちらの本を全くやっていなかったので、改めて開始します。本書は、1日1問ペースで160日間、つまり160問があるので、半年以内に終わる計算です。
0日目となっているのは書籍で言うと前準備に相当する部分をやってみるためです。
準備
1問目に入るまでに準備しておくこと。
shell
本書では、シェルはbash
を使用する想定になっているが、私が普段zsh
を使用しているため、無視してzsh
を使用することにします。(この辺り、後々問題が出そうな気もするが気にしないでおく)
必修コマンド
本書では、1問目に入る前に最低限使えておいた方がよいコマンドが紹介されるので、それらを改めて復習します。
| (パイプ)
|
を使うと、コマンドの結果を別のコマンドの入力に使用することができます。
$ echo '1+1' | bc 2
> (リダイレクト)
>
を使うと、コマンドの結果をファイルに記述することができます。
$ echo '1+1' | bc > a $ cat a 2
man
man
は各コマンドのマニュアルを見ることができます。
$ man ls
sed
sed
は置換コマンドです。基本的な使い方はsed 's/置換前/置換後/'
です。
# aをbに置換するコマンド $ echo 'aabb' | sed 's/a/b/' babb
上記では最初に発見した置換対象文字のみが置換対象となるため、すべての文字を置換する場合は末尾にg
をつけます。
# aをbに置換するコマンド $ echo 'aabb' | sed 's/a/b/g' bbbb
&
sed
コマンドでは、&
は検索対象の文字を再利用することを表します。
a
という文字を&&&
にするため、a
がaaa
に置換されたものが結果となります。
$ echo 'aabb' | sed 's/a/&&&/g' aaaaaabb
-E
-E
オプションを付けると拡張正規表現が使えます。
(これはそのうちやる)
grep
grep
コマンドは検索を行うことができます。(ここで、xargs
は出力を横に並べるためのものです)
$ seq 100 | grep "0" | xargs 10 20 30 40 50 60 70 80 90 100
書籍内では正規表現を利用した色々な書き方が載っていましたが、割愛します。
awk
書籍によれば
grep
にプログラム機能をつけたもの
ということらしい。
以下の様に書くと、seq
で表示される1 ~ 5のうち、偶数である2, 4のみが表示される様になる。
$ seq 5 | awk '$1%2==0' 2 4
パターンとアクション
awkでは、条件をパターン、処理をアクションと呼びます。
以下の例では、$1%2==0
がパターン、{print($1, "偶数")}
がアクションとなります。
また、パターンとアクションの組をルールと呼ぶそうです。
$ seq 5 | awk '$1%2==0{print($1, "odd")}' 2 odd 4 odd
BEGINとEND
BEGIN
, END
を用いることで、awkが1行目の処理を始める前と、最終行の処理を終えた後の状況で行いたい処理を実施できます。
$ seq 5 | awk 'BEGIN{print("begin!")}$1END{print("end!")}' begin! 1 2 3 4 5 end!
xargs
xargs
を使うと、指定したコマンドに引数を渡して実行することができます。
以下は、1 ~ 5ディレクトリを作成します。
$ seq 5 | xargs mkdir $ ls -l total 20 drwxr-xr-x 2 root root 4096 Dec 21 01:09 1 drwxr-xr-x 2 root root 4096 Dec 21 01:09 2 drwxr-xr-x 2 root root 4096 Dec 21 01:09 3 drwxr-xr-x 2 root root 4096 Dec 21 01:09 4 drwxr-xr-x 2 root root 4096 Dec 21 01:09 5
0日目の感想
知っているコマンドもあったものの、改めて学び直すと色々な使い方があって楽しい。 正規表現を最近使用していなかったので、思い出しつつやらないとなかなか厳しいかもしれない。
それでは次回から問題を解いていきます。