1223

grep特定のディレクトリへのスクリプトに取り組んでいます。

{ grep -r -i CP_Image ~/path1/;
grep -r -i CP_Image ~/path2/;
grep -r -i CP_Image ~/path3/;
grep -r -i CP_Image ~/path4/;
grep -r -i CP_Image ~/path5/; }
| mailx -s GREP email@domain.com

.h検索結果を拡張機能とのみに制限するにはどうすればよい.cppですか?

4

12 に答える 12

1679

--include次のようにパラメーターを使用するだけです。

grep -inr --include \*.h --include \*.cpp CP_Image ~/path[12345] | mailx -s GREP email@domain.com

それはあなたが望むことをするはずです。

以下のHoldOffHungerの回答から説明を得るには:

  • grep: 指図

  • -r: 再帰的に

  • -i: 大文字と小文字を区別しない

  • -n: 各出力行の前には、ファイル内の相対的な行番号が付きます

  • --include \*.cpp: すべて *.cpp: C++ ファイル (ファイル名にアスタリスクを含むディレクトリがある場合に備えて、\ でエスケープします)

  • ./: 現在のディレクトリから開始します。

于 2012-09-20T16:35:49.843 に答える
383

これらの回答のいくつかは、構文が重すぎるように見えたり、Debian サーバーで問題を引き起こしたりしました。これは私にとって完璧に機能しました:

grep -r --include=\*.txt 'searchterm' ./

...または大文字と小文字を区別しないバージョン...

grep -r -i --include=\*.txt 'searchterm' ./
  • grep: 指図

  • -r: 再帰的に

  • -i: 大文字と小文字を区別しない

  • --include: すべて *.txt: テキスト ファイル (ファイル名にアスタリスクが含まれるディレクトリがある場合に備えて、\ でエスケープします)

  • 'searchterm': 何を検索するか

  • ./: 現在のディレクトリから開始します。

出典: PHP Revolution: Linux でファイルを grep する方法はありますが、特定のファイル拡張子のみですか?

于 2016-02-08T22:46:38.147 に答える
82
grep -rnw "some thing to grep" --include=*.{module,inc,php,js,css,html,htm} ./
于 2015-07-23T19:38:01.333 に答える
57

使用する:

find . -name '*.h' -o -name '*.cpp' -exec grep "CP_Image" {} \; -print
于 2012-09-20T16:33:57.310 に答える
14

これはファイルを見つけるfind問題なので、使用しましょう!

GNU find を使用すると、-regexオプションを使用して、拡張子が または のいずれかであるディレクトリのツリー内のファイルを検索でき.hます.cpp

find -type f -regex ".*\.\(h\|cpp\)"
#            ^^^^^^^^^^^^^^^^^^^^^^^

grep次に、各結果に対して実行するだけです。

find -type f -regex ".*\.\(h\|cpp\)" -exec grep "your pattern" {} +

この find の分布がない場合は、オプションを連結するために使用する Amir Afghani の のようなアプローチを使用する必要があります (名前で終わるか終わります):-o.h.cpp

find -type f \( -name '*.h' -o -name '*.cpp' \) -exec grep "your pattern" {} +
#            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

本当に を使用したい場合はgrep、 に示されている構文に従います--include

grep "your pattern" -r --include=*.{cpp,h}
#                      ^^^^^^^^^^^^^^^^^^^
于 2016-08-17T09:24:51.033 に答える
1

.cおよび.hファイルを見つけるために通常使用する方法を次に示します。

tree -if | grep \\.[ch]\\b | xargs -n 1 grep -H "#include"

または、行番号も必要な場合:

tree -if | grep \\.[ch]\\b | xargs -n 1 grep -nH "#include"
于 2015-03-13T11:17:57.860 に答える
1

「-o -name」ごとに「-exec grep」と記述する必要があります。

find . -name '*.h' -exec grep -Hn "CP_Image" {} \; -o -name '*.cpp' -exec grep -Hn "CP_Image" {} \;

または ( ) でグループ化します。

find . \( -name '*.h' -o -name '*.cpp' \) -exec grep -Hn "CP_Image" {} \;

オプション '-Hn' は、ファイル名と行を表示します。

于 2014-11-10T02:09:07.317 に答える