■パイプ( "|" ) と リダイレクション( "<" ">" )
パイプ( "|" )とリダイレクション( "<" ">" )は
標準入力・標準出力・標準エラーを変更するために使う
標準入力・標準出力・標準エラーを変更するために使う
標準入力/標準出力/標準エラー
入出力 | 装置 |
標準入力 | キーボード |
標準出力 | ディスプレイ |
標準エラー | ディスプレイ |
コマンド
コマンド | 内容 |
(コマンド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