シェル・ワンライナー160本ノック week1 練習1.3.a~練習1.3.e
はじめに
私はプログラムはPythonしか書けず,CLIでのコマンド操作もcdやlsのような超基本的なコマンドしか使ってこなかったため,コマンドが使えなくて困ったという場面に出くわしたことはありませんが,なんとなく今まで引け目を感じていました.そんなときにこの本を見つけ,この機会にUnix系OSのシェル操作を習得しようと決意しました.
半年以内に習得とあるのでweek26位で完結できるように毎週7問程度取り組んでいこうと思います.最初の方はそれほど難しくないためそれ以上の問題数解くかも知れません.
環境はWindowsのWSLで解いていきます.
練習1.3.a
sedによる置換
sedコマンドで文字列を置換することが出来ます.
$ echo あいうえお | sed 's/あ/ア/' アいうえお
引数の一番目のsが文字の置換を行う宣言?で/a/bで文字列のaをbに置換出来ます.
&による再利用
$ echo あいうえお | sed 's/あい/&&&/' あいあいあいうえお
&で検索対象の文字を再利用できます.今回は&があいとなるので,&&&はあいあいあいとなります.
\による後方参照
$ echo あいうえお | sed -E 's/(あ)(い)(う)/\3\2\1/' ういあえお
文字列を()で囲む事で順番に番号が与えられます.それを\1\2と呼び出すことが出来ます.1-indexのようです.この()はあくまで文字に順番を与えるという役割しか与えてないっぽいため,
$ echo あいうえお | sed -E 's/(あ)(う)(お)/\3\2\1/' あいうえお
この出力は おいうえあ にはならずに あいうえお となります.あ が番号1,う が番号2,おが番号3として置換を行うわけではなく,あうお という文字列を探して置換しているためです.あいうえお には あうお という文字列は存在しないため,出力はそのままあいうえおとなります.
1.3.c
1.3.d
1.3.e
sort
三項演算子によって 条件?条件が真の時:偽の時 という記述が出来ます.これを使って偶数ならgusuに奇数ならkisuに文字を置き換えます.
$ seq 5|awk '{print $1%2 ? "kisu":"gusu"}' kisu gusu kisu gusu kisu
これをsortによってソートします.
$ seq 5|awk '{print $1%2 ? "kisu":"gusu"}'| sort gusu gusu kisu kisu kisu
uniq
uniqでユニークな要素,つまり重複を取り除いて出力します.
$ seq 5|awk '{print$1%2 ? "kisu":"gusu"}'| sort|uniq gusu kisu
更にオプションとして-cを付けるとその要素数を出力します.
$ seq 5|awk '{print$1%2 ? "kisu":"gusu"}'| sort|uniq -c 2 gusu 3 kisu