コマンドラインで快適生活

こんにちは増島です! アプリエンジニアの方だと、普段Mac OS Xで開発していてもコマンドラインを使う機会の少ない人も多いかと思います。
直接的に必要はなくとも、面倒な作業を効率よくしたいときにコマンドを知っていると便利だと感じます!

今回は僕がよく使うコマンドを紹介します。

wc

テキストやファイルの行数を調べるコマンドです。 ファイルを渡すと行数,単語数,バイト数がそれぞれ表示されます。

$ wc aaa.txt
  35      66    1722 aaa.txt
$

ファイルでなくともテキストをパイプで入力して調べることもできます。

$ echo "aaa" | wc
  1       1       4
$

find

ファイルの検索に使用するコマンドです。

下は今いるディレクトリの配下から末尾に.txtが付くファイル検索する例です!

今いる場所のディレクトリ構造 
$ tree
.
└── aaa
    ├── bbb
    │   ├── 1.dat
    │   ├── 2.txt
    │   └── 3.tmp
    └── ccc
        ├── 4.txt
        ├── 5.tmp
        └── ddd
            ├── 6.txt
            └── 7.tmp

4 directories, 7 files  
$

※ treeコマンドは別途インストールする必要があります
.txtファイルの検索
$ find ./ -name "*.txt"
.//aaa/bbb/2.txt
.//aaa/ccc/4.txt
.//aaa/ccc/ddd/6.txt
$

検索条件はタイムスタンプなど色々指定出来るので柔軟な検索が可能です。

xargs

標準入力から受け取った一覧情報を任意のコマンドに引数として渡すコマンド。
説明だけ見ると何を言ってるかわからないですね‥

とりあえず例を見てみましょう!! 僕は上で出てきたfindコマンドやgrepなどを組み合わせてよく使います。

今いる場所のディレクトリ構造
$ tree
.
└── aaa
    ├── bbb
    │   ├── 1.dat
    │   ├── 2.txt
    │   └── 3.tmp
    └── ccc
        ├── 4.txt
        ├── 5.tmp
        └── ddd
            ├── 6.txt
            └── 7.tmp
.txtファイルの検索
$ find ./ -name "*.txt"
.//aaa/bbb/2.txt
.//aaa/ccc/4.txt
.//aaa/ccc/ddd/6.txt
$
それぞれの.txtのファイルの中身
$ cat ./aaa/bbb/2.txt
太郎
二郎
三郎

$ cat .//aaa/ccc/4.txt
花子

$ cat .//aaa/ccc/ddd/6.txt
二郎
花子
$
今いる場所の配下からファイル名の末尾に.txtが付き、中に「二郎」の文字列が書かれたファイルを探す
$ find ./ -name "*.txt" | xargs grep "二郎"
.//aaa/bbb/2.txt:二郎
.//aaa/ccc/ddd/6.txt:二郎
$

findコマンドの出力結果(2.txt,4.txt,6.txt)をgrepコマンドに入力として渡しています。
渡された3行分の標準入力に対して、下のようにそれぞれgrepコマンドが発行されているイメージです。

grep .//aaa/bbb/2.txt  
grep .//aaa/ccc/4.txt  
grep .//aaa/ccc/ddd/6.txt  

このコマンドを使って特定ファイルに対して一括リネームなどをすると、とても簡単にできます!

sed

文字列の置換や挿入、特定行の削除などでよく使います。

ファイルの中身
$ cat sed.txt
太郎
二郎
三郎
ポチ
四郎
ポチ
$
ファイル内の「ポチ」を「たま」に置換
$ sed 's/ポチ/たま/g' sed.txt
太郎
二郎
三郎
たま
四郎
たま
$
ポチの文字列を持つ行を削除する
$ sed '/ポチ/d' sed.txt
太郎
二郎
三郎
四郎
$

awk

awkはプログラミング言語ですが、コマンドラインから簡単に扱えて非常に便利です。
デフォルトで入力データに対して行数分ループする機能を持っており、テキストの処理にとても長けています。

ファイルの中身
$ cat awk.txt
A 10  
A 10  
B 20  
B 50  
B 10  
C 10  
C 10  
C 10  
C 10  
$
ファイルの中身を全て表示する
$ awk '{ print $0 }' awk.txt
A 10  
A 10  
B 20  
B 50  
B 10  
C 10  
C 10  
C 10  
C 10  
$

各レコードのフィールドを区切って(デフォルトはスペース)扱う仕組みがあり、特定のカラムのみ表示することが出来ます。

2列目のみ表示する
$ awk '{ print $2 }' awk.txt
10  
10  
20  
50  
10  
10  
10  
10  
10  
$

プログラミング言語なので、テキストの整形に限らず計算なども出来るので色々な用途に使用出来ます!

1カラム目をキーにして2カラム目を集計する  
$ awk 'BEGIN{
  ## BEGIN句は最初に一回だけ動く
  key = "";
  total = 0;
}{
  if(key==$1){
    total = total + $2;
  }else{
    if(key!="") {
      print key " 合計:" total;
    }
    key = $1;
    total = $2;
  }
}END{
  ## END句は最後に一回だけ動く
  print key " 合計:" total;
}' awk.txt
$
A 合計:20  
B 合計:80  
C 合計:40  

alias

コマンドを別名で登録するコマンドです。 ショートカットコマンドの設定をしたいときによく使います。

alias ltr='ls -ltr'  

このようにすれば'ltr'と打つだけで'ls -ltr'が実行されるようになります。
色々なコマンドでショートカットを作って、自分の環境を好きなようにカスタマイズすると便利ですよね!
この例では'ltr'と入力すると、ディレクトリにあるファイルの詳細をタイムスタンプの昇順で表示するように設定しています。

今回紹介したものだけなく、コマンドを色々覚えればちょっとした作業がとても快適になります! これをきっかけにコマンドライン操作に苦手意識がある方も是非挑戦してみてはいかがでしょうか!!