今回はLinuxでファイル内容から指定したテキストを抽出するのによく使用されるcatコマンドとgrepコマンドについて説明します。
まず、catコマンドについて下記に示します。
書式:cat [オプション] ファイル名
オプション:-n・・・ファイル内容の各行の左端に行番号を付けて表示する
-b・・・ファイル内容の各行の左端に行番号を付けるが、空白行は飛ばして表示する。
-s・・・空白行が連続した場合、1つの行にまとめて表示する。
catコマンドは指定したファイル内容を表示するコマンドです。正確には、ファイルの内容を標準出力に出力します。そのため、シェルのリダイレクト記号を使って複数のファイルを結合して、ファイル出力することもできます。下記のようにコマンド入力すればfileAとfileBの内容を結合し、行番号を付けてfileCというファイル名で出力できます。
cat -n fileA fileB > fileC
次にgrepコマンドについて下記に示します。
書式:grep [オプション] 検索パターン [ファイル名]
オプション:-c・・・検索パターンと一致した行の行数だけを表示する
-i・・・大文字と小文字を区別せずに検索する
-n・・・検索パターンと一致した行の内容と行番号を表示する
-v・・・検索パターンが一致しない行を表示する
grepコマンドは、ファイル内容の中の検索パターンと一致した文字列を表示します。検索ファイルは複数指定できます。検索パターンに正規表現を使用することもできるので、詳細な検索が可能なコマンドです。例えばLinuxの設定ファイルやスクリプトでは、#で始まる行はコメント行を表すことが多いので、-vオプションを用いることでコメント行を省いて表示する場合に便利です。下記のようにコマンドを実行するとhttpdの設定ファイル内容をコメント行を省いた形で出力できます。
grep -v '^#' /etc/httpd/conf/httpd.conf
「^」は正規表現で行頭という意味で、「^#」は行頭に#の付いたコメント行を意味しています。正規表現を’(シングルクォーテーション)で囲っているのは、シェルのメタキャラクタとして解釈されないようにするためです。正規表現とメタキャラクタは同じ文字でも意味が異なるので、注意が必要です。
今回はファイル内容から指定したテキストを抽出するコマンドcat、grepコマンドについて説明しました。それぞれ単体でも使用できますが、grepコマンドはcatと組み合わせて使用することもできますし、それ以外でもfindやsortコマンドといったものとも組み合わせることができます。機会があったらそのコマンドについても説明したいと思います。
参考URL
・LPICレベル1 Version4.0