[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
GNU grep
を呼び出す,シェルコマンドの例は以下のようになり ます.
grep -i 'hello.*world' menu.h main.c |
これは,`menu.h'と`main.c'で,文字列`world'が続く文字列 `hello'を含む,全ての行をリストアップします.これは,`.*'が, 行の0以上の文字にマッチするためです.See 節 5. 正規表現. `-i'オプションは,grep
に大文字小文字を無視させ, `Hello, world!'にマッチさせます.そうしなければマッチしません. grep
の呼び出し方の詳細は,See 節 2. grep
の呼び出し.
以下にgrep
の使用法に関する一般的な質問と回答を記述します.
grep -l 'main' *.c |
カレントディレクトリで,内容に`main'があるCファイルの名前をリストアッ プします.
grep -r 'hello' /home/gigi |
`hello'を,ディレクトリ`/home/gigi'の下の,全てのファイルで検 索します.検索ファイルをもっと制御するために,find
, grep
と,xargs
を使ってください.例えば,以下のコマン ドはCファイルのみを検索します.
find /home/gigi -name '*.c' -print | xargs grep 'hello' /dev/null |
これは,以下のコマンドとは異なります.
grep -r 'hello' *.c |
それは単純に,現在のディレクトリのファイル名が`.c'で終るすべてのファ イルで`hello'を探します.ここでの`-r'は,再帰的が`.c'と いうファイルの一つがディレクトリであるという滅多に発生しない事象でのみ発 動するので,移植性のため不必要です.
grep -e '--cut here--' * |
`--cut here--'にマッチする全ての行を検索します.`-e'がない場合, grep
は,`--cut here--'をオプションのリストとして,分割し ようとします.
grep -w 'hello' * |
単語全体で`hello'となるもののみを検索します.`Othello'にはマッ チしません.より制御するため,単語の最初と最後にマッチする,`\<'と `\>'を使ってください.例えば,以下のようにします.
grep 'hello\>' * |
`hello'で終る単語のみを検索するので,単語`Othello'にマッチしま す.
grep -C 2 'hello' * |
マッチした行の周りの文を,それぞれ2行出力します.
grep
で強制的にファイル名を出力するにはどうしたら良いのでしょう か?
`/dev/null'を加えてください.
grep 'eli' /etc/passwd /dev/null |
以下を得るでしょう.
/etc/passwd:eli:DNGUTF58.IMe.:98:11:Eli Smith:/home/do/eli:/bin/bash |
ps
出力で,奇妙な正規表現をなぜ使うのですか?
ps -ef | grep '[c]ron' |
パターンが角カッコなしで書かれている場合,ps
出力行の cron
だけでなく,ps
出力のgrep
にもマッチしま す.プラットフォームによっては,ps
の出力が画面の幅に制限されて いることに注意してください.grep
には,利用可能なメモリ以外には, 行の長さの制限は全くありません.
grep
は"バイナリファイルのマッチ"をなぜ報告するのですか?
grep
が,バイナリファイルから全てのマッチ行をリストアッ プした場合,生成された出力はおそらく役に立たず,ディスプレイにゴミを撒き 散らすでしょう.そのため,GNU grep
は,明らかなバイナリファ イルからの出力は抑制します.明らかなバイナリファイルからも,GNU grep
の出力を強制させるため,`-a'や `--binary-files=text'オプションを使用してください."Binary file matches"メッセージをエミュレートするため,`-I'や `--binary-files=without-match'オプションを使用してください.
`grep -lv'は,1つ以上マッチしていない行を含む,全てのファイル名をリ ストアップします.マッチ行がない全てのファイル名をリストアップするために, `-L'や`--files-without-match'オプションを使ってください.
grep 'paul' /etc/motd | grep 'franc,ois' |
`paul'と`franc,ois'の両方を含む全ての行を検索します.
特別なファイル名`-'を使用してください.
cat /etc/passwd | grep 'alain' - /etc/motd |
後方参照を使用して行なうことが可能で,例えば,4文字の回文は基本的な正規 表現で書くことが可能です.
grep -w -e '\(.\)\(.\).\2\1' file |
それは,単語"radar"や"civic"にマッチします.
Guglielmo Bondioniは,19文字までの長さのすべての回文を見つける,単一の 正規表現を提案しました.
egrep -e '^(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?).?\9\8\7\6\5\4\3\2\1$' file |
これはGNUの拡張正規表現の拡張機能を使用してなされていることに注意し てください.それは他のgrep
では移植性が無いでしょう.
/bin/echo "ba" | egrep '(a)\1|(b)\1' |
最初の交換で失敗し,最初のグループはマッチにならず,このため2番目の交換 でも失敗します.例えば,"aaba"にはマッチし,最初のグループはマッチに加わ り,2番目のマッチで再利用することが可能です.
grep, fgrep, egrep
は何を意味するのですか?
grep
はUnix上で行を編集するものとして生まれました.例えば, ed
は画面にマッチした行のリストを出力するために,この構文を使用 します.
global/regular expression/print g/re/p |
fgrep
は修正されたgrep
を意味し,egrep
は拡張 されたgrep
を意味します.
[ << ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |