今野 英明
平成26年4月28日
テキストファイルの中身を閲覧する道具として cat コマンドやエディタがある。 その他にもページャー (pager) という種類のコマンドがあり,ページャーを使えば,比較的大きなテキストファイルの中身を手軽に閲覧することができる。 more コマンドは UNIX に標準的に備わっている代表的なページャーであるが,ここでは more の機能拡張版である less を使ってファイルを閲覧する。 さらにテキストファイル内から必要な情報を取得するために検索操作を行ってみる。
なお,コマンドの使いかたを調べる際に使う man コマンドは,マニュアルの表示に less を使うことが多い。 また,この授業の後半で使うデータベースソフトウェアにおいても,検索結果の表示に less を使う。 従って,man コマンドやデータベースソフトウェアを使うためにも less の基本的な使い方は習得する必要がある。
ディレクトリの絶対パス名 /pub/db_a/data75.60k.vocab.romaji には,各行につき単語の
less filenameここで,filename には内容を見たいファイルの名前を指定する。
機能 | コマンド | コメント |
終了 | q (または :q) | |
ヘルプ | h | |
ページ移動 | <SPACE> (または CTRL-f または f) | 次ページに移動する |
b (または CTRL-b) | 前ページに移動する | |
j (または <Enter> または ) | 1行下に移動する | |
k (または ) | 1行上に移動する | |
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_a/data/75.60k.vocab.romaji次に asshuku (圧縮)を grep する。
grep asshuku /pub/db_a/data/75.60k.vocab.romaji
「圧縮(asshuku)」は欲しいけれども「合宿(gasshuku)」はいらないならば,教材テキストでの項目(列)区切りが +(プラス記号)であることを利用して,
grep +asshuku /pub/db_a/data/75.60k.vocab.romajiを実行すればよい。
「あめ」を調べたいと思って
grep ame /pub/db_a/data/75.60k.vocab.romajiとすると,407単語(407行)が該当し,結果を画面に表示しきれない。 grep の出力を,パイプ(
|
) を使って less に入力すると,結果を less で 1 ページずつ見ることができる。
grep ame /pub/db\_a/data/75.60k.vocab.romaji | less
less の終了方法などについては,第 1.4 節の less の主要コマンドを参照のこと。
grep [options] pattern [file...]
grep は file で名前を指定された入力ファイル (fileが指定されてないか, file の部分に - が指定された場合は標準入力) を読み込み,与えられた pattern にマッチする部分を含む行を探す。
以下にしばしば使う grep のオプションを挙げるので試してみよう。 さらに詳しく知りたいときには man grep を実行すればよい。
-n : 各出力行の前に,入力ファイルにおける行番号を表示する
-r : ディレクトリ下のすべてのファイルを再帰的に読み取る
-v : マッチした行を表示しない。(マッチしない行を表示)--help
: 簡単なヘルプメッセージを出力する--version
: grep コマンドのバージョンを出力する
上記のうちで,--help
と --version
は多くのコマンドで共通に使えるオプションであり,これらでは引数の pattern は不要である。
>
)を使ってファイルに格納しなさい。
ただし,格納先のファイルは,
ホームディレクトリに存在するディレクトリ db14 の下の ame とする。
db14 が存在しなければ,まず作成すること。
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_a/data/75.60k.vocab.romaji grep n..kuki /pub/db_a/data/75.60k.vocab.romaji grep kuki$ /pub/db_a/data/75.60k.vocab.romaji grep 's.*kuki$' /pub/db_a/data/75.60k.vocab.romaji
.*
は長さが 0 以上の任意の文字列にマッチするので,最後の例では,s を含み行末が kuki である行 (パターン s.*kuki$
を含む行) のみが出力される。