Windowsでは、フォルダー内のWordを見つけるための検索をしたはずです。同様に、特定のWordが多数のサブディレクトリとファイルを含むディレクトリの内側にあるかどうかを知りたいです。 grep構文を検索したところ、ファイル名、つまりgrep string filename
を指定する必要があることがわかりました。
今、私はファイル名がわからないので、私は何をしますか?友人がgrep -nr string
を実行することを提案しましたが、これが何を意味するのか私にはわからず、私はそれで結果が得られませんでした(私が発行するまで応答がありません)。 ctrl + c).
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を使用してください。
grep -nr string my_directory
追加の注意:Unix風のシステムではディレクトリは一種のファイルであるため、これは構文grep [options] string filename
を満たします(Windowsでは単に「ファイル」と呼ばれるエンティティを指す「通常ファイル」という用語があります)。
grep -nr string
は標準入力から検索する内容を読み込むので、そこからあなたからの入力を待つだけで、^ Cを押すとそのようにするのをやめます(^ Dを押すと終了します)。 of-file).
_ grep _ :グローバル正規表現の印刷/パーサー/プロセッサ/プログラム。
これを使って現在のディレクトリを検索することができます。
"recursive"には-Rを指定できます。これは、プログラムがすべてのサブフォルダ、それらのサブフォルダ、およびそれらのサブフォルダのサブフォルダなどを検索することを意味します。
grep -R "your Word" .
-n
は、ファイル内で一致した行番号を表示します。-i
は大文字と小文字を区別しないで検索します(大文字/小文字以外の文字)。
grep -inR "your regex pattern" .
またあります:
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
を使用しない場合、スペースを含むファイル名で問題が発生するため、それらを使用するのが良い習慣です。
grep -nr search_string search_dir
search_stringを検索する(ディレクトリとそのすべてのサブディレクトリを意味する)RECURSIVEを実行します。 (正しくustaによって答えられるように)。
あなたが友達の提案で何も答えを得ていなかった理由:
grep -nr string
ディレクトリが指定されていないためです。検索したいディレクトリにいる場合は、次の手順を実行する必要があります。
grep -nr string .
「。」を含めることが重要です。これはgrepにこのディレクトリを検索するように伝えます。
サブディレクトリ内のすべてのインスタンスを見つけるために再帰的検索をしないのはなぜでしょうか。
grep -r 'text' *
これは魅力的です。
grep -r "yourstring" *
任意のファイルやフォルダの中に "yourstring"が見つかります同時に2つの異なる文字列を検索したい場合は、常にオプションEを使用して検索用の単語を追加できます。休憩後の例
grep -rE "yourstring|yourotherstring|$" *
は、yourstring
またはyourotherstring
が一致するリストの場所を検索します。私が使用したいもう一つのオプション:
find folder_name -type f -exec grep your_text {} \;
-type fはファイルのみを返し、フォルダは返しません
-execおよび{}は、検索で見つかったファイルに対してgrepを実行します(正確な構文は "-exec command {}"です)。
grep -R "string" /directory/
以前はgrep -rでしたが、私のバージョンでは動作しなくなったことに気付きました。
grep --version
grep (GNU grep) 3.1
あなたが選んだ答えは大丈夫です、そしてそれは機能しますが、それをするための正しい方法ではありません。
grep -nr yourString* .
これは実際には文字列"yourStrin"
と"g"
を0回以上検索します。
そのための正しい方法は次のとおりです。
grep -nr \w*yourString\w* .
このコマンドは、現在のフォルダの前後に任意の文字を含む文字列を検索します。
@eLRuLLによって投稿された回答と同様に、Wordの境界を尊重する検索を指定するより簡単な方法は、-w
オプションを使用することです。
grep -wnr "yourString" .
Grepを使わないでください。 Silver Searcher または ripgrep をダウンロードしてください。どちらも優れており、grepよりもはるかに高速で、たくさんのオプションを選択できます。