コマンドを組合わせる ~ パイプの基本
Linux のコマンドはひとつひとつは単機能でも、複数のコマンドを組み合わせて使うことで、より柔軟にいろいろな状況で使えるようにできています。
ここでは、コマンドを組み合わせて使うとは何か、ということを説明して、実際に組み合わせる方法について説明します。
コマンドを組み合わせるって、どういうこと?
具体例をあげて説明します。
head コマンドは -nm オプションで、指定したファイルの先頭 m 行を表示するコマンドです。
tail コマンドは -nm オプションで、指定したファイルの終わりの m 行を表示するコマンドです。
head コマンドや tail コマンドの使い方については、 「テキストファイルの内容を表示する」をみてください。
それぞれのコマンドだけでは、上から何行、下から何行しか表示できません。
しかし、head コマンドで 「上から 2 行」取り出して、その結果の中から tail コマンドで 「下から 1 行表示」することによって、 2行目だけを取り出すことが可能になります。
$ cat file1 # file1 の中身を表示 This is line 1. file1. This is line 2. file1. This is line 3. file1. $ head -n2 file1 | tail -n1 # head と tail を使う This is line 2. file1. # 2 行目だけが取り出せた
具体的な方法は後述します。 ここでは head と tail の両方を同時に使った、 ことだけみてください。
さらに、その結果を tr コマンドに渡すことで、 「file1 の 2 行目を大文字にして表示する」というコマンドが出来上がります。
$ head -n2 file1 | tail -n1 | tr 'a-z' 'A-Z' THIS IS LINE 2. FILE1.
このように、単機能のコマンドを複数組み合わせることによって、どんどん複雑な処理を追加していくことができます。
どうやってコマンドを組み合わせるの?
それでは具体的にコマンドを組み合わせる方法について説明します。
上の例をもう一度みてみましょう。
$ head -n2 file1 | tail -n1 This is line 2. file1.
コマンドを並べるのに縦棒 | を使っています。これがポイントです。
この縦棒 | はパイプといいます。 パイプでコマンドをつなぐことで、前のコマンドの標準出力の内容を次のコマンドに渡すことができます。
パイプは複数数珠つなぎにすることができます。
上の例でも head コマンドの結果を tail コマンドに渡し、 さらに tr コマンドに渡していました。
$ head -n2 file1 | tail -n1 | tr 'a-z' 'A-Z' THIS IS LINE 2. FILE1.
このパイプとリダイレクトを組み合わせることで、様々な処理をコマンドラインから実行することが可能になります。