cat (UNIX)
cat(キャット)はUNIXの標準コマンドであり、ファイルを連結させたり表示したりするのに用いる。catは連結することを意味する「catenate」の略である。
仕様
[編集]Single UNIX Specificationでは、catは引数で指定されたファイルの内容を指定された順番に標準出力に書き出すと規定している。 ファイル名のリストに「-」が含まれていた場合、catはリストのその時点で標準入力からデータを読み込む。ファイル名が指定されなかった場合もcatは標準入力から読み込む。
拡張
[編集]BSD版のcatとGNU版のcatはどちらも次のオプションを指定できる。
- -b(GNUでは--number-nonblankとも):空白でない行の数を数え、行番号を付加する。
- -n(GNUでは--numberとも):すべての行の数を数え、行番号を付加する。
- -s(GNUでは--squeeze-blankとも):隣接する空白行を除く。
- -v(GNUでは--show-nonprintingとも):表示できない文字も表示する。ただしタブと改行文字を除く。
- -t(BSD)または-T(GNU):-vと同じだが、タブを^Iと表示する。
- -e(BSD)または-E(GNU):-vと同じだが、改行文字を$と表示する。
実例
[編集]コマンド | コマンドの説明 |
---|---|
$ cat file1 |
file1の内容を表示する |
$ cat file1 file2 |
file1およびfile2の内容を連結し、端末上にその結果を表示する |
$ cat file1 file2 > file3 |
file1およびfile2の内容を連結し、ファイルfile3にその結果を出力する |
$ cat > newfile |
新規ファイルnewfileを作成もしくは上書きして、入力したい内容を打ち込み、CTRL+Dコマンドで終了する。入力された内容は新規ファイルに書き込まれる。 |
$ cat -n file1 file2 > file3 |
file1およびfile2の内容を連結し、ファイルfile3にその結果を行番号とともに出力する |
$ cat file1 > file2 |
file1の内容をfile2にコピーする |
$ cat file1 >> file2 |
file1の内容をfile2に追加する |
$ cat file1 file2 file3 | sort > test4 |
file1およびfile2およびfile3の内容を連結し、連結された行を頭文字の順に並べ替え、その内容を新規ファイルに書き出す。 |
$ cat file1 file2 | less |
file1およびfile2の内容を連結し、lessコマンドを実行する |
UNIXの文化
[編集]ジャーゴンファイルでの定義
[編集]ジャーゴンファイルのバージョン4.3.3には、catの定義として次のように記されている[1]。
- ファイル全体をスクリーンまたは流し台か何かにとめどなく吐き出すこと(類:blast)。
- 転じて、膨大なデータを注意深く目を通すこともせずに準備ができていない目標に向かって吐き捨てること。使用例:馬鹿げている。UNIX以外の場所で使われることは稀である。参照:dd、BLT。
UNIXファンの間では、cat(1)はユーザインターフェースデザインのよい手本とされている。catはファイルの内容に空白やヘッダのような余分なものを一切付加せずに提供してくれるためであり、またテキストファイルのみならずどんな種類のデータに対しても正しく動作するためだ。
UNIX嫌いの間では、cat(1)は悪いユーザインターフェースデザインの正統な手本とされている。それはこの悲しいまでにわかりづらい名称のためである。catは、ファイルの連結(concatenate)に使うよりもむしろ標準出力への出力に使われることの方がはるかに多い。後者の使用法に対するcatという名称は、ちょうどLISPのcdrのように非直感的である。
cat
コマンドとUUOC
[編集]UUOCは「無駄なcat
の使用(Useless Use of cat
)」の略である。
Usenetのcomp.unix.shellに投稿された賢者の観察によると,
。
にもかかわらず、次のような使用をよく見かける。
cat
の役割はファイルを連結することである。もしファイルが1つしかないのであれば、何かと連結しようとするのは時間と手間の無駄でしかない
$ cat file | somecmd 引数……
代わりに次のように書けば簡単である。
$ <ファイル somecmd 引数……
次も同じであるが、より古典的な方法である。
$ somecmd 引数…… <ファイル
1995年からUUOCの授賞が、主にRandal L. Schwartzによって時々行われている。イギリスのハッカーたちの間では、UUOCに挙げられた例を修正することはmoggyが猫(cat)を表すことからdemoggificationと呼ばれる。