■パイプ( "|" ) と リダイレクション( "<" ">" )
パイプ( "|" )とリダイレクション( "<" ">" )は
標準入力・標準出力・標準エラーを変更するために使う
標準入力・標準出力・標準エラーを変更するために使う
標準入力/標準出力/標準エラー
| 入出力 | 装置 |
| 標準入力 | キーボード |
| 標準出力 | ディスプレイ |
| 標準エラー | ディスプレイ |
コマンド
| コマンド | 内容 |
| (コマンド1) | (コマンド2) | [パイプ] コマンド1の出力をコマンド2の入力にする |
| (コマンド) > (ファイル名) | [標準出力の変更] コマンドの標準出力を(ファイル名)に出力する |
| (コマンド) >> (ファイル名) | [標準出力の変更(追記)] コマンドの標準出力を(ファイル名)に出力する |
| (コマンド) 2> (ファイル名) | [標準エラーの変更] コマンドの標準エラーを(ファイル名)に出力する |
| (コマンド) < (ファイル名) | [標準入力の変更] (ファイル名)の中身を標準入力の変わりにコマンドに渡す |
| (コマンド) 2>&1 | 標準エラーと標準出力をひとまとめにする |
★パイプ "|"★ lsコマンド、headコマンド、tailコマンドを用いた例
| コマンド | 内容 |
| ls | カレントディレクトリにあるファイル名を表示 |
| head -n (ファイル名) | (ファイル名)の内容を先頭からn行表示 |
| tail -n (ファイル名) | (ファイル名)の内容を末尾からn行目以降が表示 |
$ ls -l
total 12 ←ここから
-rw-r--r-- 1 hoge hoge 4 xxxx-xx-xx xx:xx aaa.txt
-rw-r--r-- 1 hoge hoge 4 xxxx-xx-xx xx:xx bbb.txt
-rw-r--r-- 1 hoge hoge 4 xxxx-xx-xx xx:xx ccc.txt ←ここまでがls -lコマンドの出力
$ ls -l | head -2
total 12
-rw-r--r-- 1 hoge hoge 4 xxxx-xx-xx xx:xx aaa.txt ←先頭から2行目まで出力される
$ ls -l | tail -3
-rw-r--r-- 1 hoge hoge 4 xxxx-xx-xx xx:xx aaa.txt ←末尾から3行目以降が出力される
-rw-r--r-- 1 hoge hoge 4 xxxx-xx-xx xx:xx bbb.txt
-rw-r--r-- 1 hoge hoge 4 xxxx-xx-xx xx:xx ccc.txt
★リダイレクション">" ">>" "2>"★ echoコマンド、catコマンドを用いた例
| コマンド | 内容 |
| echo (内容) | (内容)を標準出力に出力 |
| cat (ファイル名) | (ファイル名)の内容を標準出力に出力 |
■echo (内容) :(内容)を標準出力(ディスプレイ)に出力)
$ echo aaa
aaa ←ディスプレイにaaaが出力される
■echo (内容) > (ファイル名) :(内容)を(ファイル名)に出力 ※ディスプレイには出力しない
$ echo aaa > ttt.txt ←ttt.txtにaaaが書き込まれ、ディスプレイにaaaが出ない
$ cat ttt.txt ←ttt.txtの内容を見るとaaaが書き込まれている
aaa
■echo (内容) >> (ファイル名) :(内容)を(ファイル名)に追記 ※ディスプレイには出力しない
$ cat ttt.txt
aaa ←aaaと書き込まれているttt.txtファイル
$ echo bbb >> ttt.txt
$ cat ttt.txt
aaa ←もともと書き込まれていたaaaのあとに
bbb ←bbbが追記される
■cat (存在しないファイル名) :エラーが標準エラー(ディスプレイ)に出力
$ cat nnn.txt
cat: nnn.txt: No such file or directory ←エラーがディスプレイに出力される
■cat (存在しないファイル名) 2> (ファイル名) :エラーが(ファイル名)に出力 ※ディスプレイには出力しない
$ cat nnn.txt 2> eee.txt ←エラーが画面に出力されない
$ cat eee.txt
cat: nnn.txt: No such file or directory ←eee.txtにエラーが書き込まれる
★リダイレクション"<"★ 例
いろいろな組み合わせ例
tail -100 xxxx.log | head -50 > xxxx.out
↑xxxx.logの後ろから100行目から以降の50行をxxxx.outに切り出す
grep ^000 xxxx.log | sed "s/aaa/bbb/g"
↑xxxx.logの中から000で始まる行を探しその行の"aaa"を"bbb"に書き換えて画面表示
./a.out |tee xxxx.log
↑a.outを実行し、ディスプレイに表示される標準出力をxxxx.logにも書き込む
ls -1 | wc -l
↑カレントディレクトリのファイル数を表示させる
(ls -1でカレントディレクトリのファイルを1行に1個表示させた結果を
wc -l コマンドに渡す。wc -lは入力されたファイル(=今回はls -1の内容)の行数を表示)
■``
ついでに `` を紹介しておきます
シェルスクリプトでよく使います
シェルスクリプトでよく使います
$./a.out Hello,World
./a.outの結果をls -lコマンドに渡す
$ ls -l `./a.out` ls: Hello,World: No such file or directory ./a.outの結果を変数に渡す $ arg=`./a.out` $ echo $arg Hello,World