テキストファイルの中身を閲覧する道具として, cat コマンドやエディタがあるのは知っているはずですが, その他にページャー (pager) という種類のコマンドがあります。 ページャーを使えば, 比較的大きなテキストファイルの中身を効率よく閲覧することができます。 代表的なページャーとして more や less 等がありますが,ここでは less を使ってファイルを閲覧します。 さらにテキストファイル内から必要な情報を取得するために検索操作を行ってみます。
なお,man コマンドを用いてコマンドのマニュアルを閲覧する際, マニュアルの表示には less が使われることが多いです。 また,この授業の後半で使うデータベースソフトウェアにおいても, 検索結果の表示にless を使います。 従って, man コマンドやデータベースソフトウェアを使うためにも less の 基本的な使い方を習得する必要があります。
ディレクトリの絶対パス名 /pub/db/dataこのディレクトリ内のファイル 75.60k.vocab.romaji が当該ファイルです。 このファイルには,各行につき単語の
less filenameです。 もちろん,filename には,内容を見たいファイルの名前を指定します。
機能 | コマンド | コメント |
終了 | q (または :q) | |
ヘルプ | h | |
ページ移動 | <SPACE> (または CTRL-f または f) | 次ページに移動する |
b (または CTRL-b) | 前ページに移動する | |
G | 最後の行に移動する | |
nG | 第n行に移動する | |
テキストを検索する | /pattern <Enter> | patternが最初に現れる位置に移動する(下方検索) |
?pattern <Enter> | pattern が最初に現れる位置に移動する(上方検索) | |
n | 一番最近行った検索を繰り返す | |
N | 一番最近行った検索を逆方向に繰り返す |
kaiba
を検索語として検索してみましょう。
less で検索するには / に続いて検索語 (pattern) を記入し <Enter> を押します。
検索語の記入途中でタイプミスをしたら,CTRL-c で検索語入力を中止できます。
kyoiku
です。
この章では,grep コマンドを用いて, テキストファイルから特定の文字列を含む行のみを取り出して, 閲覧する方法を学ぶ。
grep の基本的な実行の形式は次のとおりである。
grep 文字列 ファイル名この形式では,grep はファイルの内容から, 特定の文字列を含む行のみを出力する。
まず,asshukukuki (圧縮空気)を含む行だけをファイルから取り出してみる。
grep asshukukuki /pub/db/data/75.60k.vocab.romaji
こんどは asshuku (圧縮)を grep してみる。
grep asshuku /pub/db/data/75.60k.vocab.romaji
「圧縮(asshuku)」は欲しいけど「合宿(gasshuku)」はいらないならば, 教材テキストでの項目(列)区切りが +(プラス記号)であることを利用して,
grep +asshuku /pub/db/data/75.60k.vocab.romajiを実行すればよい。
「あめ」を調べたいと思って
grep ame /pub/db/data/75.60k.vocab.romajiとすると, 407単語(407行)も該当してしまい,結果を画面に表示しきれない。 grep の出力を,パイプ(
|
) を使って less に入力すると,
結果を less で 1 ページずつ見ることができる。
grep ame /pub/db/data/75.60k.vocab.romaji | less
less の終了方法などについては,
第 1.4 節の
less の主要コマンド
など
を参照のこと。
grep [options] pattern [file...]grep は file で名前を指定された入力ファイル (fileが指定されてないか, file の部分に - が指定された場合は標準入力) を読み込み, 与えられた pattern にマッチする部分を含む行を探す。
以下に,しばしば使うオプションを挙げるので,試してみよう。 さらに詳しく知りたいときは man grep を実行しよう。
-n : 各出力行の前に,入力ファイルにおける行番号を表示する。
-r : ディレクトリ下のすべてのファイルを再帰的に読み取る。
-v : マッチした行を表示しない。(マッチしない行を表示)--help
: 簡単なヘルプメッセージを出力する。--version
: grep コマンドのバージョンを出力する。
--help
と --version
は多くのコマンドで共通に使えるオプションであり,
このオプションを使う際には
引数の pattern は不要。
>
)を使ってファイルに格納しなさい。
ただし,格納先のファイルは,
ホームディレクトリに存在するディレクトリ dbintro
の下の ame とする。
dbintro が存在しなければ,まず作成すること。
grep の pattern 引数や less における /pattern 等では, 正規表現 (regular expression) と呼ばれる検索パターンを指定できる。 その代表的なものを以下に示す。 これ以外の正規表現については,grep のマニュアル等を参照のこと。
^ |
行の先頭 |
$ |
行の終わり |
. |
任意の一文字 |
[ ...] |
...のうちの任意の一文字。
a-z や 0-9 のような範囲指定も有効 |
[^ ...] |
... にない任意の一文字。
a-z や 0-9 のような範囲指定も有効 |
r* |
ゼロ回以上の r の繰り返し。
2 文字以上からなるパターン str の繰り返しを指定したければ
(str)* |
\c | 文字 c の特殊な意味をなくす |
次の例を実行して,簡単な正規表現の使い方を確認してください。
grep kuki /pub/db/data/75.60k.vocab.romaji grep n..kuki /pub/db/data/75.60k.vocab.romaji grep kuki$ /pub/db/data/75.60k.vocab.romaji grep 's.*kuki$' /pub/db/data/75.60k.vocab.romaji
.*
は長さが 0 以上の任意の文字列にマッチするので,
最後の例は,s を含み行末が kuki である行
(パターン s.*kuki$
を含む行) のみを出力する。