目次
- grepの使い方(I)
- grepの使い方(II)
- grepの主なオプション
- grepで使える正規表現
- grepで使えるメタ文字
filenameとして複数のファイル名を指定すると,それらのファイルを対象に処理を行う.% grep pattern filename
パターンに正規表現を使わなくてもgrepは有用である. 以下の例では,検索対象となるファイル群があると思われるディレクトリにワーキングディレクトリを移動しているとする. そうでなければ,検索ファイル(群)の指定には目的とするディレクトリまでのディレクトリパスも指定する必要がある.
たとえば,パターンマッチのターゲットとするファイルcopyingに対して,次のようにgrepを使う.
% grep programs copying.txt your programs, too. in new free programs; and that you know you can do these things. programs whose distribution conditions are different, write to the author proprietary programs. If your program is a subroutine library, you may
このときには,ファイル名の後にマッチしたパターンを含む行を表示する.% grep programs *.txt copying.txt: your programs, too. copying.txt: in new free programs; and that you know you can do these things. copying.txt: programs whose distribution conditions are different, write to the author copying.txt: proprietary programs. If your program is a subroutine library, you may apple.txt: application. Now here is an AppleScript programs that accomplishes the same task
% 他のコマンドからの出力 | grep pattern
たとえば,マッチした総行数を表示するオプション「-c」を付けて調べると,ファイルcopying.txtにはパターン/the/を含む行を169行あることが分かる.
パターン/the/を含む169行の中から,さらにパターン/programs/を含む行を抜き出すには,最初のgrepの結果をパイプしてさらにgrepに渡してやると,次のように2行を得ることができる.% grep -c the copying.txt 169
% grep the copying.txt | grep programs in new free programs; and that you know you can do these things. programs whose distribution conditions are different, write to the author
% grep option pattern filename
オプション | 意味 |
---|---|
-c | マッチした総行数の表示 |
-i | 大文字小文字を区別しない |
-n | 行番号をつけて表示 |
-v | 指定したパターンを含まない行だけを表示 |
-l(エル) | 指定したパターンを含むファイル名だけを表示 |
演習:オプション-cを使わないで,マッチした総行数を表示するには,フィルタwcをオプションを付けてパイプする.% grep -c Apple target.txt
% grep -i Apple target.txt
演習:大小文字を区別せずにマッチした行の行番号も表示するにはどうすればよいか.% grep -ic Apple target.txt
式 | 意味 |
---|---|
c | メタ文字でない文字"c"はその文字自身を表す |
\m | メタ文字"m"のその文字自身を表す |
^(ハット) | 行頭を表す |
$ | 行末を表す |
.(ピリオド) | 任意の1文字を表す |
[c1c2....cn] | 文字集合c1c2...cnの中の任意の1文字 |
[c1-c2] | c1からc2までの文字範囲の中の任意の1文字 |
[^c1c2...cn] | c1c2...cnのどれでもない任意の1文字 |
r* | 正規表現rの0回以上の繰り返しを表す |
r1r2 | 正規表現r1に正規表現r2が続く並びを表す |
\(r\) | タグ付き正規表現r(正規表現のグループ化)を表す |
\N | N番目のタグ付き表現がマッチした文字列を表す. |
正規表現をパターンとするときには,引用符『'』で囲んでいることに注意する(シェルにエスケープ記号などを解釈されないようにするため).% grep '^Apple' target.txt
% grep 'apple * juice' target.txt
このときには,パターン/apple/と/juice/を含む行が得られるが,残念ながらその`順番'(appleが先でjuiceが後)までは指定できていない. しかし,これでも十分な場合もある.% grep apple target.txt | grep juice
\ ^ $ . [ ] *
メタ文字を`文字'として指定するためには,上の正規表現の表にあるように,記号『\』を付けてメタ文字の意味をエスケープ(escape)する. この意味で,メタ文字をエスケープ記号ということがある.
とする. \\titleとせずに\\title{としているのは,\maketitleを含む行が表示されるのを避けるためである.% grep '\\title{' *.tex
演習:LaTeX文書のファイル群を対象に,行頭に%のある行を表示せよ.
LaTeX文書では,記号%は特にエスケープしていない限り,行末までの文字列は無視されるために,コメントとして使うことができる.演習: