13.9. catによるファイルの操作

Red Hat Linux には、短いリストを保存したり、それらのリストをまとめたり、 そしてシステムにに関する情報を示したりすることもできるユーティリティ があります。

このユーティリティは catと呼ばれるもので、 ファイルを合併させると言う意味のconcatenate を短くした名前です。

catコマンドは、画面上のすべてのファイルの内容 を表示することもします(例えば、cat filename.txtと タイプします)。ファイルがとても長い場合は、画面上を素早くスクロール していき、内容が読み取れません。これを防止するには、 cat filename.txt | lessコマンドをタイプします。

パイプ (|) と lessコマンドを一緒に使用すると、 1ページずつ表示させます。そして、上と下の矢印キーを使用するとページが 前後に移動します。パイプで2つの機能をまとめる作業に関する詳細は 項13.10をご覧ください。

13.9.1. リダイレクトの使用

リダイレクトとは、シェルが標準入力と見なすものや、標準出力がどこに 出力されるべきかを変更することを意味します。

標準出力をリダイレクトするには、 > シンボルを使用します。 >を cat コマンドの後ろ (又は、標準出力へ 書き出す各ユーティリティやアプリケーションの後)に付けると、 その出力をそのシンボルの後のファイル名に転送します。

例えば、catだけを使用すると、何を画面に 入力しようと、ちょうど入力した行と同じことの繰りかえしが出力され ます。次の例に、catが入力された各行を繰りかえ しているところを示します。

図 13-5. catコマンド

catの出力をファイルへリダイレクトするためには、 シェルプロンプトで以下をタイプします([Enter]キーを 押して空白行へ移動します)。

cat > sneakers.txt

図 13-6. 出力をファイルにリダイレクト

[Enter]を押して 空白の行へ行き、そこで[Ctrl]-[D]の2つのキーを 押して、 catを終了します。

図13-6内の違いがお判りでしょうか? エントリが繰り返されていません。これは、catからの標準出力が リダイレクトされたからです。そのリダイレクトはユーザーが作成した sneakers.txtと言う新しいファイルに対して 行われました。

そのファイルはcatを開始したときにいた ディレクトリの中で見つけることができます。(ls とタイプするとリストが表示されます)

以前に学んだように、cat を使用してファイル を読むことができます。プロンプトで次のようにタイプします。

cat sneakers.txt

注意重要
 

出力をファイルにリダイレクトするときは、既存のファイル を上書きしがちなので、十分注意してください。ファイルを 置き換えたい場合を除き、作成するファイルと同じ名前のファイル が存在していないことを確認してください。

再度、標準出力をもう一つのファイルにリダイレクトして、 それをhome.txtと呼びましょう。例として、 cat > home.txtをタイプし、[Enter] を押します。それから、次のように続けます。

bring the coffee home
take off shoes
put on sneakers
make some coffee
relax!

ここで、空白の欄に移動して、もう1度 [Ctrl ]-[D] の組み合わせを使用して catを終了します。

次にcatを使用してhome.txt sneakers.txtを接続し、両方の ファイルの出力を新しい名前のファイルsaturday.txt にリダイレクトします(この操作の例は 図13-7でご覧ください)。次のように タイプします。

cat sneakers.txt home.txt > saturday.txt

図 13-7. ファイルの結合と出力のリダイレクト

catsneakers.txt の終了点にhome.txtを 追加していることが お分かりでしょう。

13.9.2. 標準出力の追加法

出力リダイレクトを使用すると、既存のファイルの終わりに新しい 情報を追加することができます。「>」記号を使用する場合と同じように、 シェルに対して、情報を標準出力以外に送るように指示することになります。

ただし、「>>」を使用した場合には、ファイルの内容を 置き換えるのではなく、情報がファイルに追加 されます。

実際に試してみると、良くわかります。すでに作成されている 2つのファイル(sneakers.txthome.txt )を追加出力記号を指定して連結します。home.txt の中の情報を sneakers.txtにある 情報に追加した場合、次のように入力します。

cat home.txt >> sneakers.txt

ここで、cat sneakers.txtコマンドを使用して、 ファイルを確認しましょう。最終的な出力は、ファイルの最後に home.txtの内容を表示しています。

buy some sneakers
then go to the coffee shop
then buy some coffee
bring the coffee home
take off shoes
put on sneakers
make some coffee
relax!

ユーザーがタイプしたコマンドはシステムにhome.txt ファイルの出力をsneakers.txtファイル に追加しなさいと指示したのです。

この出力を追加することで、新しいファイルを作成することなく、 既存のファイルを使用して自分自身の時間(及び、ディスクのクラスターも 少々)節約できたわけです。

sneakers.txtsaturday.txt の両ファイルを比較して同じかどうか確認しましょう。 同じ結果だと判ると思います。比較するには次のようにタイプします。

cat sneakers.txt; cat saturday.txt

これで、両方のファイルが表示されます。— 最初が sneakers.txt、その次にsaturday.txt です( 図13-8でご覧ください)。

図 13-8. コマンドの連結とファイルの比較

13.9.3. 標準入力のリダイレクト

標準出力のリダイレクトだけではなく、標準入力について も同じようにリダイレクトを実行することができます。

標準入力リダイレクト記号の「<」を使用すると、コマンド の入力元としてファイルを使用するように、とシェルに伝えることに なります。

作成済みのファイルを使用して、実際に試してみましょう。

cat < sneakers.txt

これで、ファイルからcatコマンドへつなぐ 不等合の記号(<)を使用したので、catsneakers.txtからの出力を読み込みます。

図 13-9. 標準入力のリダイレクト