基本的な機能は、文字列を検索することです。基本的な使い方は、
と打ち込んでリターンすると、指定したファイルの中で、文字列が存在する行の 中身が表示されます。
それでは実習のために、下記のような内容のファイル「address1.txt」と 「address2.txt」を作ってみましょう。
と実行して、emacs上で下記の内容を打ち込んでください。「address2.txt」に 関しても同様の手順でやってみてください。ちなみに、前者はリテラシーの 先生方のメールアドレス、後者は自分の友人のメールアドレスという位置づけです。
% cat address1.txt suzuki@zzz.tuis.ac.jp doi@zzz.TUIS.AC.JP susaki@aaa.bb.cc.dd ohshiro@yahoo.co.jp yamaga@yyy.com sinohara@joho.ac.jp % cat address2.txt e02000ab@zzz.tuis.ac.jp endo@chiba-u.ac.jp e01050hh@zzz.tuis.ac.jp s02000ab@zzz.tuis.ac.jp m02134yn@zzz.tuis.ac.jp b99055cc@yyy.tuis.ac.jp c99123ym@zzz.tuis.ac.jp a00106sn@zzz.tuis.ac.jp
この2つのファイル「address1.txt」「address2.txt」を元に、grepの使い方を 学習していきます。
% grep suzuki address1.txt suzuki@zzz.tuis.ac.jp
% grep -n suzuki address1.txt 1:suzuki@zzz.tuis.ac.jp
% grep tuis address1.txt suzuki@zzz.tuis.ac.jp
% grep -i tuis address1.txt suzuki@zzz.tuis.ac.jp doi@zzz.TUIS.AC.JP
% grep -i -c zzz address1.txt (または) % grep -ic zzz address1.txt 2
% grep -v zzz address1.txt doi@zzz.TUIS.AC.JP susaki@aaa.bb.cc.dd ohshiro@yahoo.co.jp yamaga@yyy.com sinohara@joho.ac.jp % grep -iv zzz address1.txt susaki@aaa.bb.cc.dd ohshiro@yahoo.co.jp yamaga@yyy.com sinohara@joho.ac.jp
(実行結果) e02000ab@zzz.tuis.ac.jp e01050hh@zzz.tuis.ac.jp s02000ab@zzz.tuis.ac.jp m02134yn@zzz.tuis.ac.jp c99123ym@zzz.tuis.ac.jp a00106sn@zzz.tuis.ac.jp
(実行結果) 6
(実行結果) 1
% grep -e ac.jp -e co.jp address1.txt suzuki@zzz.tuis.ac.jp ohshiro@yahoo.co.jp sinohara@joho.ac.jp
% grep -e ac.jp co.jp address1.txt grep: co.jp: そのようなファイルやディレクトリはありません address1.txt:suzuki@zzz.tuis.ac.jp address1.txt:sinohara@joho.ac.jp
% grep -e ac.jp address1.txt | grep sinohara sinohara@joho.ac.jp
% grep -e ac.jp address1.txt suzuki@zzz.tuis.ac.jp sinohara@joho.ac.jp
メタ文字 | マッチングの条件 | 用例 | マッチング例 |
---|---|---|---|
^ | 行の先頭にあればマッチする | ^and | ando anddddddd |
$ | 行のおわりにあればマッチする | and$ | land dreamland |
. | 任意の1文字が存在すればマッチ | fa. | fax fantastic |
* | 直前のものが0回以上繰り返すとマッチ | yahoo* | yaho yahooooo |
[...] | [ ]内の任意の一文字にマッチ | data[0123456789] data[0-9] 注意:2つとも同じ意味 | data1 data8 |
data[abcde] data[a-e] 注意:2つとも同じ意味 | dataa datac | ||
data[a-zA-Z0-9_] | data1 dataB | ||
[^ ] | 否定 | data[^0-5] | data7 datac |
data[^abc] | data7 datad | ||
^[^abc] 注意:行先頭が'a','b','c' 以外で始まる場合にマッチ) | yzaw eeeeee |
% grep o address1.txt doi@ZZZ.TUIS.AC.JP ohshiro@yahoo.co.jp yamaga@yyy.com sinohara@joho.ac.jp
% grep ^o address1.txt ohshiro@yahoo.co.jp
% grep "^.[aiueo]" address1.txt suzuki@zzz.tuis.ac.jp doi@ZZZ.TUIS.AC.JP susaki@aaa.bb.cc.dd yamaga@yyy.com sinohara@joho.ac.jp
address2.txtの中身 e02000ab@zzz.tuis.ac.jp endo@chiba-u.ac.jp e01050hh@zzz.tuis.ac.jp s02000ab@zzz.tuis.ac.jp m02134yn@zzz.tuis.ac.jp b99055cc@yyy.tuis.ac.jp c99123ym@zzz.tuis.ac.jp a00106sn@zzz.tuis.ac.jp
(実行結果) e02000ab@zzz.tuis.ac.jp e01050hh@zzz.tuis.ac.jp
(実行結果) e02000ab@zzz.tuis.ac.jp e01050hh@zzz.tuis.ac.jp b99055cc@yyy.tuis.ac.jp
(実行結果) e01050hh@zzz.tuis.ac.jp a00106sn@zzz.tuis.ac.jp
(実行結果) endo@chiba-u.ac.jp