ファイル操作のコマンド

 これまでの連載においても,ファイル操作に関するコマンドをいくつか紹介してきました。ここでは,テキスト・ファイルを操作したり,Windowsのファイルにアクセスするためのコマンドを紹介します。

●cat

 コマンドcat*5は,「ファイルを連結する」コマンドです。「Linux全般編 ファイルの仕組みと操作法(4)」ではファイルを標準出力に渡す*6ためだけに利用しました。ここでは,catコマンド本来の機能であるファイルの連結を紹介します。

 例えば,ファイルfile1とfaile2を連結し,ファイルfile3を新たに作成するには,

と入力します。catコマンドの出力先は標準出力ですので,シェルのリダイレクション機能で出力先を切り替えています。連結するファイルには,3つ以上のファイルを指定することもできます。

●split

 ファイルの連結と逆の操作,すなわち分割を実行するコマンドがsplitです。splitコマンドでは,指定した行数(-lオプション)あるいはバイト数(-bオプション)単位で,大きなサイズのファイルを複数のファイルに分割できます。デフォルトでは分割後のファイル名はxで始まり,aa,abなどと英字2文字が順に付加されます。分割後のファイル名の指定もできます。

 例えば,テキスト・ファイルoriginal.textを1000行単位で分割し,分割後のファイル名をsplitで始めたい場合には,

と入力します。テキスト・ファイルoriginal.textの行数が2450の場合,分割後のファイル名は

となり,3つのファイルが作成されます。もちろん最後のファイルsplitacの行数は450です。

●diff

 diff*7は,2つのテキスト・ファイルの違いを検出するコマンドです。違いがなかった場合には,何も出力しません。

 例えば,sample1.textとsample2.textのファイルの違いを探してみましょう(図1[拡大表示])。この例では,2カ所の違いが検出されました。最初は3行目で,sample1.textでは「c」ですがsample2.textでは「cc」になっています。次は5行目で,「e」が「eee」になっています。

 2つのファイルを比較して違いだけを書き込んだファイルを差分ファイルあるいはパッチと呼びます。これは,ソフトウエアのソース・コードをアップグレードする際などに利用されます*8。この差分ファイルを作成するときに,diffコマンドを使います。差分ファイルがあれば,ソース・コード全体は必要ありません。もちろん,前バージョンのソースは必要です。

●grep

 grep*9は,検索パターンとして指定した文字列(半角および全角文字)をファイルから調べ,見つかった行をすべて出力します*10

 検索パターンの指定には正規表現も使えます。正規表現の方法は,前回のテキスト・エディタed「文字列パターンの指定」で紹介した内容と同様です。

 具体例を示します。ファイルsample2.textで文字列「eee」を検索してみます。

検索パターンとして指定した文字列を含む行が見つからなかった場合には,何も出力されません。この実行例では1行見つかったことが分かります。ただし,これでは不親切ですので,「-n」オプションを指定して行番号も出力してみましょう。

 検索パターンの指定に正規表現を使った例を示しましょう。先頭がxyzのいずれかの文字で始まる行を探すには次のように入力します。

この例では,24行目から26行目に該当する文字列が含まれることが分かります。

 英字の大文字と小文字を区別しないで検索したい場合には,以下のように「-i」オプションを指定します。

これで,文字列abc,ABC,Abc,ABc,aBCなどを含む行が出力されます。