回答:
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
またはor MobileAppServlet.class
またはMobileAppServlet.txt
; 'MobileAppASer*.*'
は同じことを行う別の方法です。)
他のパラメータを確認するには、man grepコマンドを使用します。
grep -nr MobileAppSer* .
1.私たちは、現在のディレクトリマッチングにおける3つのファイルがあるとしMobileAppSer*
、ワイルドカードパターンを:名前のMobileAppServlet.java
、MobileAppServlet.class
、MobileAppServlet.txt
。次に、次のgrep
ように呼び出されます:grep -nr MobileAppServlet.class MobileAppServlet.java MobileAppServlet.txt .
。これは、ファイル「MobileAppServlet.java」、「MobileAppServlet.txt」、および現在のディレクトリの他の場所で「MobileAppServlet.class」というテキストを検索することを意味します。これは、ユーザーがここで望んでいることとは異なります。
MobileAppSer*
ワイルドカードパターンに一致するファイルが現在のディレクトリにない場合はgrep
、引数をMobileAppSer*
そのまま受け取るため、テキスト「MobileAppSe」とそれに続く「r」の0回以上の出現を検索するものと見なされるため、現在のディレクトリのファイルコンテンツで、テキスト「MobileAppSe」、「MobileAppSer」、「MobileAppSerr」、「MobileAppSerrr」などを見つけようとします-ユーザーが望んでいるものではありません。
grep -nr string my_directory
追記:grep [options] string filename
Unixライクなシステムでは、ディレクトリは一種のファイルであるため、これは構文を満たします(Windowsでは単に「ファイル」と呼ばれるエンティティを具体的に指す「通常のファイル」という用語があります)。
grep -nr string
検索するコンテンツを標準入力から読み取ります。そのため、ユーザーからの入力を待ち、^ Cを押すと停止します(^ Dでも停止します。これは、End-ofのキーの組み合わせです) -ファイル)。
grep -inr "my word" .
-r
grepは、サブディレクトリを再帰的に検索-n
することを意味し、出力の各行の先頭に、その行を含むファイルの対応する行番号を付けます。man grep
このすべてについて説明します。
GREP:グローバル正規表現の印刷/パーサー/プロセッサ/プログラム。
これを使用して、現在のディレクトリを検索できます。
「再帰的」には-Rを指定できます。これは、プログラムがすべてのサブフォルダーとそのサブフォルダー、およびそれらのサブフォルダーのサブフォルダーなどを検索することを意味します。
grep -R "your word" .
-n
ファイル内で一致した行番号を出力します。
-i
大文字と小文字を区別せずに検索します(大文字/非大文字)。
grep -inR "your regex pattern" .
grep -nr search_string search_dir
search_stringに対してRECURSIVE(ディレクトリとそのすべてのサブディレクトリを意味します)検索を実行します。(ustaが正しく答えたように)。
友達の提案で回答が得られなかった理由:
grep -nr string
ディレクトリが指定されていないためです。検索を行うディレクトリにいる場合は、次のことを行う必要があります。
grep -nr string .
「。」を含めることが重要です。これは、grepにこのディレクトリを検索するように指示するためです。
またあります:
find directory_name -type f -print0 | xargs -0 grep -li word
しかし、それは初心者には少し多すぎるかもしれません。
find
汎用のディレクトリウォーカー/リスターであり、-type f
「ディレクトリと名前付きパイプではなくプレーンファイルを探して何を持っているか」を-print0
意味し、「区切り文字としてnull文字を使用して標準出力に出力する」ことを意味します。からの出力find
はに送信されxargs -0
、(コマンドラインの長さの制限を回避するために)標準入力を(標準の改行ではなく)レコード区切り文字として使用してチャンクで取得し、grep -li word
を各ファイルセットに適用します。ではgrep
、-l
「一致するファイルをリストする」ことを-i
意味し、「大文字と小文字を区別しない」ことを意味します。通常は1文字のオプションを組み合わせることができるため、-li
より頻繁に表示されます-l -i
。
使用しない-print0
と-0
、スペースを含むファイル名で問題が発生するため、それらを使用することをお勧めします。
man find
ありますfind
。コマンドラインから、サポートされているオプションを確認してください。
サブディレクトリ内のすべてのインスタンスを見つけるために再帰検索をしないのはなぜですか。
grep -r 'text' *
これは魅力のように機能します。
選択した答えは問題なく機能しますが、次の理由により、正しい方法ではありません。
grep -nr yourString* .
これは実際には文字列"yourStrin"
を検索し、"g"
0回以上検索します。
したがって、適切な方法は次のとおりです。
grep -nr \w*yourString\w* .
このコマンドは、現在のフォルダーで前後の任意の文字を含む文字列を検索します。
grep -nr yourString
、それは裸を探して、あまりにも働くyourString
行のどこか(あるいは、それは私のシステム、OSXライオンの上にいた少なくとも)
@eLRuLLによって投稿された回答と同様に、単語の境界を尊重する検索を指定する簡単な方法は、-w
オプションを使用することです。
grep -wnr "yourString" .
grepを使用しないでください。Silver Searcherまたはripgrepをダウンロードしてください。どちらも優れており、grepや大量のオプションを使用したackよりもはるかに高速です。
*
ですか?シェルのワイルドカード展開(ワイルドカードパターンに一致するファイル名がある場合)が発生するか、またはgrepはそれをの前の文字の0以上の繰り返し演算子として扱います*
。