パイプとリダイレクト

linuxのコマンドの出力は、コンソール上に表示させるだけでなく、ほかのコマンドの入力にしたり、ファイルへの出力にしたりすることができます。

パイプとは

パイプとは、あるコマンドの出力をほかのコマンドの入力にする機能です。 例えばsample.txtというファイルに

ijkl
abcd
mnop
efgh
abcd
abcd
mnop

という文字列を入力しておきましょう

このとき

uniq sample.txt

とすると

ijkl
abcd
mnop
efgh
abcd
mnop

という文字列が表示されます。uniqコマンドは、連続した重複行でなければうまく削除できないため、abcdとmnopが2回表示されてしまっています。

ここで

sort sample.txt

とすると

abcd
abcd
abcd
efgh
ijkl
mnop
mnop

という文字列が表示されます。このソートした結果に対して uniqコマンドを利用すれば良いのですが、その時に使われるのがパイプです。

sort sample.txt | uniq

とすることで

  • sortコマンドによってsample.txtの中身がソートされる
  • パイプ(|)によってsortコマンドの出力がuniqコマンドに渡される
  • uniqコマンドによって連続した重複行が削除される

という処理が行われ

abcd
efgh
ijkl
mnop

という出力が得られます。 このようにパイプを通じて順番にコマンドを適用していくことで 複雑な処理を1行で書くことが可能になります。

リダイレクトとは

リダイレクトとは、コマンドの入出力を標準入出力から切り替えることです。

例えば

echo 'abc'

とすると画面(標準出力)に

abc

と表示されますが、この出力先を画面からファイルに変更することが可能です。 例えば

echo 'abc' > redirect.txt

とすると、画面に文字が表示される代わりにredirect.txtにabcが書き込まれるようになります。

なお、再度

echo 'def' > redirect.txt

とすると、今度はredirect.txtの中身はdefに上書きされます。 上書きではなく追記したい場合には、

echo 'def' >> redirect.txt

とする必要があるので気をつけましょう。特に重要なファイルに対して「>」で上書きをしてしまわないように気をつける必要があります。

ほかにもリダイレクトは様々な活用法がありますので、調べてみましょう。

results matching ""

    No results matching ""