「grep」コマンドを使うと、指定した文字列が含まれる行を検索することができます。
複数のファイルの中から文字列が含まれる行を検索したり、他のコマンドの実行結果から必要な行だけを抽出したりと さまざまな場面で応用できるコマンド。
以下から Linuxコマンド「grep」の具体的な使い方とオプションを解説していきます。
目次
- 1 「grep」コマンドの基本
- 2 「grep」コマンドの応用
- 2.1 -a(–text)オプション
- 2.2 -A(–after-context)オプション
- 2.3 -b(–byte-offset)オプション
- 2.4 -B(–before-context)オプション
- 2.5 –binary-files オプション
- 2.6 -c(–count)オプション
- 2.7 -C(–context)オプション
- 2.8 –color オプション
- 2.9 -d(–directories)オプション
- 2.10 -e(–regexp)オプション
- 2.11 -E(–extended-regexp)オプション
- 2.12 –exclude オプション
- 2.13 –exclude-dir オプション
- 2.14 –exclude-from オプション
- 2.15 -f(–file)オプション
- 2.16 -F(–fixed-strings)オプション
- 2.17 -G(–basic-regexp)オプション
- 2.18 -E(–extended-regexp)オプション
- 2.19 -f(–file)オプション
- 2.20 -F オプション
- 2.21 -h(–no-filename)オプション
- 2.22 -H(–with-filename)オプション
- 2.23 -i(–ignore-case)オプション
- 2.24 –include オプション
- 2.25 -l(–files-with-matches)オプション
- 2.26 -L(–files-without-match)オプション
- 2.27 –line-buffered オプション
- 2.28 -m(–max-count)オプション
- 2.29 –mmap オプション
- 2.30 -n(–line-number)オプション
- 2.31 –null オプション
- 2.32 -o(–only-matching)オプション
- 2.33 -P(–perl-regexp)オプション
- 2.34 -q(–quiet, –silent)オプション
- 2.35 -r(–recursive)オプション
- 2.36 -R(–dereference-recursive)オプション
- 2.37 -s(–no-messages)オプション
- 2.38 -u(–unix-byte-offsets)オプション
- 2.39 -U(–binary)オプション
- 2.40 -v(–invert-match)オプション
- 2.41 -V(–version)オプション
- 2.42 -w(–word-regexp)オプション
- 2.43 -x(–line-regexp)オプション
- 2.44 -y オプション
- 2.45 -Z(–decompress)オプション
- 3 まとめ
「grep」コマンドの基本
「grep」は以下のように検索パターンとファイル名を指定して使います。
grep 検索パターン ファイル名
特定のファイルから指定した文字列が含まれる行を検索する
実際にコマンドを使って文字列を検索してみましょう。
その前に、まずはファイルを作成していきます。
vi コマンドなどでファイルの作成・編集ができますが、Cloud9 を使っている場合はコマンドを使わなくてもエディタを使って簡単に作成できます。
「file1.txt」という名前のファイルを作成し、ファイルを開いて内容を
aaa bbb ccc ddd eee
に編集し、保存します。
このファイルから「b」が含まれる行を検索してみましょう。コマンドは以下。
grep b file1.txt
以下のように「b」が含まれる行が表示されました。
他のディレクトリ(フォルダ)にあるファイルから検索する
検索対象のファイルはパスで指定することができます。
パスの詳しい解説はこちら。
例えば「directory1」という名前のディレクトリの中にある「file1.txt」という名前のファイルから「a」という文字列が含まれる行を検索する場合は、以下のコマンドになります。
grep a directory1/file1.txt
複数のファイルから検索する
半角スペースで区切って複数のファイルを指定することで、それらのファイルからまとめて検索することができます。
例えば以下のようにすると、「file1.txt」と「file2.txt」と「file3.txt」のファイルの中から「a」という文字列が含まれる行を検索することができます。
grep a file1.txt file2.txt file3.txt
実行結果例
特定の名前が含まれるディレクトリをまとめて削除する
*
(ワイルドカード)を使うことで、特定の名前が含まれているファイルをまとめて検索対象にすることができます。
例えば以下のようにすると、ファイル名の末尾に「.txt」がついているファイルから まとめて検索することができます。
grep a *.txt
また、以下は「directory1」という名前のディレクトリの中にある全てのファイルから検索する例。
grep a directory1/*
検索したい文字列
以下のようにパイプ(|
)を使うことで、コマンド結果の中から指定した文字列が含まれている行を検索することができます。
コマンド | grep 検索パターン
例えば以下は、ls コマンドでカレントディレクトリのファイル一覧を取得し、「txt」が含まれる行だけ表示する例。
ls -l | grep txt
また、上のコマンドから さらにパイプ(|
)で grep コマンドを繋げて、「txt」と「file1」が含まれる行だけ表示することもできます。
ls -l | grep txt | grep file1
ls コマンドの詳しい使い方はこちら。
ここまでが「grep」コマンドの基本!
「grep」コマンドの応用
「grep」コマンドの理解をさらに深めたい方は以下もご覧ください。
(オプションの解説は順次追加していきます。)
-a(–text)オプション
-A(–after-context)オプション
-b(–byte-offset)オプション
-B(–before-context)オプション
–binary-files オプション
-c(–count)オプション
-C(–context)オプション
–color オプション
-d(–directories)オプション
-e(–regexp)オプション
-E(–extended-regexp)オプション
–exclude オプション
–exclude-dir オプション
–exclude-from オプション
-f(–file)オプション
-F(–fixed-strings)オプション
-G(–basic-regexp)オプション
-E(–extended-regexp)オプション
-f(–file)オプション
-F オプション
-h(–no-filename)オプション
-H(–with-filename)オプション
-i(–ignore-case)オプション
–include オプション
-l(–files-with-matches)オプション
-L(–files-without-match)オプション
–line-buffered オプション
-m(–max-count)オプション
–mmap オプション
-n(–line-number)オプション
–null オプション
-o(–only-matching)オプション
-P(–perl-regexp)オプション
-q(–quiet, –silent)オプション
-r(–recursive)オプション
-R(–dereference-recursive)オプション
-s(–no-messages)オプション
-u(–unix-byte-offsets)オプション
-U(–binary)オプション
-v(–invert-match)オプション
-V(–version)オプション
-w(–word-regexp)オプション
-x(–line-regexp)オプション
-y オプション
-Z(–decompress)オプション
まとめ
以上、Linuxコマンド「grep」の使い方でした!
ここまでの内容をまとめておきます。
- 「grep」コマンドで指定した文字列が含まれる行を検索することができる。
- 対象のファイルはパスで指定できる。
- 複数のファイルを検索対象にすることができる。
- パイプ(
|
)を組み合わせることで、あるコマンド結果の中から指定した文字列が含まれている行を抽出することができる。