grep 検索の方法
grep 検索の方法
grep コマンドの使い方をまとめます。
構文
/usr/bin/grep [-c | -l | -q] [-bhinsvw] limited-regular-expression [filename]...
オプション
- -c
-
一致する行数の合計を出力します。
- -l
-
一致する行があるファイル名のみを出力します。
同じファイル内で複数一致しても、ファイル名の出力は一回だけです。 - -q
-
標準出力には何も出力しません。
オプション -c
, -l
, -q
はいずれか一つしか指定できません。
もし複数指定した場合の優先度は -c
→ -l
→ -q
の順に高いです。
e.g., grep -c -l -q
と指定した場合、-q
だけを指定したときと同じ動きになります。
- -b
- 各行の前に、その行が見つかったブロック番号を追加します。これは、コンテキストに基づいてブロック番号を見つける場合に役立ちます(最初のブロックは 0)。
- -h
- 一致する行を含むファイル名がその行の先頭に追加されないようにします。
複数のファイルを検索する場合に使用します。 - -i
- 比較時に大文字と小文字を区別しません。
- -n
- ファイル内の各行の先頭に行番号を付けます(最初の行は 1)。
- -s
- 存在しないファイルまたは読み取り不可能なファイルに関するエラーメッセージを出力しません。
- -v
- パターンに一致しない行を出力します。
- -w
- 単語単位で検索します。
戻り値
0
: 一致あり。
1
: 一致なし。
2
: 構文エラー、またはアクセスできないファイルあり(一致するものがあった場合でも)。
使用例
-c オプションを付けるとパターンに一致した行数が出力されます。
(出力されるのは行番号ではなく一致した行の数です)
> grep -c printf *.c
fileA.c:0
fileB.c:5
-l オプションを付けると、パターンに一致した行があるファイル名だけが出力されます。
> grep -l printf *.c
fileB.c
-q オプションを付けると、標準出力には何も出力されません。
> grep -q printf *.c
${status} で結果を確認できます。
> echo ${status}
0
-b オプションを付けると、パターンに一致した行のディスクブロック番号が出力されます。
> grep -b printf fileC.c
8: printf("ファイルが存在しません\n%s", path);
-n オプションを付けると、パターンに一致した行の行番号が出力されます。
> grep -n printf fileC.c
130: printf("ファイルが存在しません\n%s", path);
存在しないファイルまたは読み取り不可能なファイルに関するエラーメッセージを出力しないようにするには、 -s オプションを付けます。
-s を付けない場合
> grep printf *.c
grep: can't open fileD.c
-s を付けた場合
> grep -s printf *.c
${status} で結果を確認できます。
> echo $status
2
単語単位で検索するには -w オプションを付けます。
-w を付けない場合
printf だけ検索したいのに fprintf や sprintf もヒットしてしまいます。
> grep printf *.c
fileE.c: fprintf(stderr, "Can't open file.\n");
fileF.c: printf("Can't open file.\n");
fileG.c: sprintf(error, "Can't open file [%s]", path);
-w を付けた場合
printf だけヒットしました。
> grep -w printf *.c
fileF.c: printf("Can't open file.\n");
アカウントを作成 して、もっと沢山の記事を読みませんか?
この記事にコメントをしてみませんか?