web-dev-qa-db-ja.com

grepを使ってフォルダ内のWordを検索する方法を教えてください。

Windowsでは、フォルダー内のWordを見つけるための検索をしたはずです。同様に、特定のWordが多数のサブディレクトリとファイルを含むディレクトリの内側にあるかどうかを知りたいです。 grep構文を検索したところ、ファイル名、つまりgrep string filenameを指定する必要があることがわかりました。

今、私はファイル名がわからないので、私は何をしますか?友人がgrep -nr stringを実行することを提案しましたが、これが何を意味するのか私にはわからず、私はそれで結果が得られませんでした(私が発行するまで応答がありません)。 ctrl + c).

467
kiki
grep -nr 'yourString*' .

末尾のドットは現在のディレクトリを検索します。各パラメータの意味

-n            Show relative line number in the file
'yourString*' String for search, followed by a wildcard character
-r            Recursively search subdirectories listed
.             Directory for search (current directory)

grep -nr 'MobileAppSer*' .MobileAppServlet.JavaまたはMobileAppServlet.classまたはMobileAppServlet.txtを見つけるでしょう; 'MobileAppASer*.*'は同じことをする別の方法です。)

より多くのパラメータをチェックするには man grep commandを使用してください。

703
Manish Ranjan

grep -nr string my_directory

追加の注意:Unix風のシステムではディレクトリは一種のファイルであるため、これは構文grep [options] string filenameを満たします(Windowsでは単に「ファイル」と呼ばれるエンティティを指す「通常ファイル」という用語があります)。

grep -nr stringは標準入力から検索する内容を読み込むので、そこからあなたからの入力を待つだけで、^ Cを押すとそのようにするのをやめます(^ Dを押すと終了します)。 of-file).

107
usta

_ grep _ :グローバル正規表現の印刷/パーサー/プロセッサ/プログラム。
これを使って現在のディレクトリを検索することができます。
"recursive"には-Rを指定できます。これは、プログラムがすべてのサブフォルダ、それらのサブフォルダ、およびそれらのサブフォルダのサブフォルダなどを検索することを意味します。

grep -R "your Word" .

-nは、ファイル内で一致した行番号を表示します。
-iは大文字と小文字を区別しないで検索します(大文字/小文字以外の文字)。

grep -inR "your regex pattern" .
55
Stefan Steiger

またあります:

find directory_name -type f -print0 | xargs -0 grep -li Word

しかし、それは初心者にとっては少し大きいかもしれません。

findは汎用のディレクトリウォーカー/リスターで、-type fは「ディレクトリと名前付きパイプではなくプレーンファイルを検索し、何を持っているか」を意味し、-print0は「標準出力に印刷する」を意味します区切り文字としてヌル文字を使用する」。 findからの出力はxargs -0に送信され、レコード区切り文字として(標準の改行ではなく)NULL文字を使用して(コマンド行の長さ制限を回避するため)チャンクで標準入力を取得し、grep -li Wordファイルの各セット。 grepでは、-lは「一致するファイルをリストする」ことを意味し、-iは「大文字と小文字を区別しない」ことを意味します。通常、1文字のオプションを組み合わせて、-liよりも-l -iを頻繁に表示できます。

-print0-0を使用しない場合、スペースを含むファイル名で問題が発生するため、それらを使用するのが良い習慣です。

24
mu is too short
grep -nr search_string search_dir

search_stringを検索する(ディレクトリとそのすべてのサブディレクトリを意味する)RECURSIVEを実行します。 (正しくustaによって答えられるように)。

あなたが友達の提案で何も答えを得ていなかった理由:

grep -nr string

ディレクトリが指定されていないためです。検索したいディレクトリにいる場合は、次の手順を実行する必要があります。

grep -nr string .

「。」を含めることが重要です。これはgrepにこのディレクトリを検索するように伝えます。

22
Nico Huysamen

サブディレクトリ内のすべてのインスタンスを見つけるために再帰的検索をしないのはなぜでしょうか。

grep -r 'text' *

これは魅力的です。

4
Paxwell
  1. grep -r "yourstring" *任意のファイルやフォルダの中に "yourstring"が見つかります

同時に2つの異なる文字列を検索したい場合は、常にオプションEを使用して検索用の単語を追加できます。休憩後の例

  1. grep -rE "yourstring|yourotherstring|$" *は、yourstringまたはyourotherstringが一致するリストの場所を検索します。
4
Nwaoga

私が使用したいもう一つのオプション:

find folder_name -type f -exec grep your_text  {} \;

-type fはファイルのみを返し、フォルダは返しません

-execおよび{}は、検索で見つかったファイルに対してgrepを実行します(正確な構文は "-exec command {}"です)。

3
jfhfhf839
grep -R "string" /directory/

以前はgrep -rでしたが、私のバージョンでは動作しなくなったことに気付きました。

grep --version
grep (GNU grep) 3.1
1
DimiDak

あなたが選んだ答えは大丈夫です、そしてそれは機能しますが、それをするための正しい方法ではありません。

grep -nr yourString* .

これは実際には文字列"yourStrin""g"を0回以上検索します。

そのための正しい方法は次のとおりです。

grep -nr \w*yourString\w* .

このコマンドは、現在のフォルダの前後に任意の文字を含む文字列を検索します。

1
eLRuLL

@eLRuLLによって投稿された回答と同様に、Wordの境界を尊重する検索を指定するより簡単な方法は、-wオプションを使用することです。

grep -wnr "yourString" .
0
Mike Slinn

Grepを使わないでください。 Silver Searcher または ripgrep をダウンロードしてください。どちらも優れており、grepよりもはるかに高速で、たくさんのオプションを選択できます。

0
AAAfarmclub