Grepは、ファイルのコンテンツを検索する必要がある場合に優れたツールです。
通常、次のように1つのファイルでgrepを実行します。
grep search_term filename
Grepは非常に用途が広いです。 grepを使用してディレクトリ内のすべてのファイルを検索する場合 、次のように使用します:
grep search_term *
問題があります。現在のディレクトリ内のすべてのファイルのみを検索します。サブディレクトリは検索されません。
すべてのファイルとすべてのサブディレクトリでgrep検索を行うことができます -r
を使用した現在のディレクトリの 再帰検索オプション:
grep -r search_term .
検索を実行するディレクトリにいない場合は、ディレクトリパスを指定することもできます。
grep -r search_term directory_path
それは簡単な要約でした。わかりやすくするために、これらすべてを適切な例とともに詳しく説明します。
この例で使用するディレクトリ構造は次のとおりです。 empty.txtを除いて、すべてのファイルには、grep検索を実行する「simple」という用語が含まれています。
example@unixlinux.online:~/scripts$ tree
.
├── dir1
│ └── new_script.sh
├── dir2
│ └── your_script.sh
├── dir3
│ ├── empty.txt
│ └── linked.txt -> ../../sample.txt
├── my_script.sh
└── your_script.sh
3 directories, 6 files
現在のディレクトリのすべてのファイルで「simple」という単語を検索するには、ワイルドカード(*)を使用します。ワイルドカードは、実際には現在のディレクトリ内のすべてのファイルとディレクトリの名前に置き換えられます。
grep simple *
これにより、現在のディレクトリ内のすべてのファイルが検索されますが、サブディレクトリには入力されません。ディレクトリを直接grep検索することはできないため、検索結果とともに「XYZはディレクトリです」というエラーが表示されます。
実行するディレクトリと同じディレクトリにいない場合は、ディレクトリパスを指定して、/ *
で終了できます。grep search_term directory_path/*
基本的に、ワイルドカードを使用して、指定されたディレクトリのすべての要素(ファイルとディレクトリ)を展開します。
これで、grepを使用して再帰検索を実行し、サブディレクトリ内のファイルも調べる方法を見てみましょう。
Grepは-r
を提供します 再帰検索のオプション。このオプションを使用すると、grepは現在の(または指定された)ディレクトリ内のすべてのファイルを調べ、すべてのサブディレクトリのすべてのファイルも調べます。
これは、現在のフォルダーでgrep検索を実行するために前の例で実行した再帰検索です。
grep -r simple .
結果は次のとおりです。
-R
もあります 再帰検索のオプションであり、-r
とほぼ同じように機能します オプション。
grep -R simple .
では、grep -r
の違いは何ですか およびgrep -R
?実際には1つだけです。 -R
は逆参照検索です。これは、シンボリックリンクをたどって元のファイル(システムの他の部分にある可能性があります)に移動することを意味します。
-R
の出力を見てください 同じ例で検索:
linked.txt
で追加の検索結果が得られることに気づきましたか これは基本的にシンボリックリンクであり、-r
を使用してgrep検索から省略されました。 オプション?
再帰検索を実行するディレクトリにいない場合は、ディレクトリの絶対パスまたは相対パスをgrepコマンドに指定するだけです。
grep -r search_term path_to_directory
ボーナスのヒント:再帰的なgrep検索から特定のディレクトリを除外します
すべてが良さそうですが、再帰検索から特定のディレクトリを除外したい場合はどうでしょうか。そのための規定もあります。 grepは非常に用途の広いコマンドです。
grep -r --exclude-dir=dir_name serach_term directory_path
それではない。次の方法で、再帰検索から複数のサブディレクトリを除外できます。
grep -r --exclude-dir={dir1,dir2} serach_term directory_path
この例では、除外ディレクトリは次のようになります。
はい、上記の例で示されているように、除外は-r
の両方で機能します および-R
再帰オプション。
複数のファイルとディレクトリに対してgrep検索を使用する方法の概要は次のとおりです。
Grepコマンド | 説明 |
---|---|
grep文字列* | 現在のディレクトリ内のすべてのファイルを検索します |
grep string dir | dirディレクトリ内のすべてのファイルを検索します |
grep-rstring。 | すべてのサブディレクトリ内のすべてのファイルの再帰検索 |
grep -r string dir | dirのすべてのサブディレクトリ内のすべてのファイルの再帰検索 |
grep-Rstring。 | rと同じですが、シンボリックリンクをたどります |
この簡単なgrepのヒントが気に入っていただければ幸いです。さらに必要な場合は、grepコマンドの使用に関する詳細なチュートリアルをお読みください。
このトピックについて質問や提案があれば教えてください。