通常、変数または関数が使用されているファイルを見つけようとするときに、これを数回行う必要がありました。
これを行うために、過去に grep で xargs を使用したことを覚えていますが、もっと簡単な方法があるかどうか疑問に思っています。
grep -r REGEX .
.
検索元のディレクトリに置き換えます。
これを行うためのポータブルな方法*は
find . -type f -print0 | xargs -0 grep pattern
-print0
findにASCIInulを区切り文字として使用するように-0
指示し、xargsに同じことを指示します。それらを使用しない場合、名前にスペースが含まれているファイルやディレクトリでエラーが発生します。
*一部のマシンでのみ機能するgrep-r、grep -R、またはgrep--recursiveとは対照的です。
これは、 grepの代わりにack ( http://petdance.com/ack/ ) を使い始めたケースの 1 つです。このサイトから、Perl CPAN コンポーネントとしてインストールするための手順を取得するか、依存関係を処理せずにインストールできる自己完結型のバージョンを取得できます。
デフォルトで再帰検索が使用されるという事実に加えて、Perl 強度の正規表現を使用したり、正規表現を使用して検索するファイルを選択したりできます。オプションの印象的なリストがあります。サイトにアクセスして確認することをお勧めします。非常に使いやすいことがわかりました。vi(m)、emacs、さらには TextMate と統合するためのヒントもあります。
文字列の一致を探している場合は、使用します
fgrep -r pattern .
これは、grep を使用するよりも高速です。ここの件名の詳細: http://www.mkssoftware.com/docs/man1/grep.1.asp
ほとんどの Linux ディストリビューションに付属している GNU grep を使用している場合は、grep -r を使用します。
ほとんどの UNIX では、デフォルトではインストールされていないため、代わりにこれを試してください。
探す 。-タイプ f | xargs grep 正規表現
zshシェルを使用する場合は、使用できます
grep REGEX **/*
また
grep REGEX **/*.java
一致するファイルが多すぎると、これが不足する可能性があります。
ただし、正規の方法は、exec で find を使用することです。
find . -name '*.java' -exec grep REGEX {} \;
また
find . -type f -exec grep REGEX {} \;
「type f」ビットは単にファイルのタイプを意味し、すべてのファイルに一致します。
答えを次のように変更することをお勧めします。
grep REGEX -r .
-r スイッチは正規表現を示しません。指定されたディレクトリに再帰するようにgrepに指示します。
これは、1 つ以上のファイル タイプを使用して正確な式を再帰的に見つける優れた方法です。
find . \\( -name '\''*.java'\'' -o -name '\''*.xml'\'' \\) | xargs egrep
(内部単一引用符)
どこ
-name '\''*.<filetype>'\'' -o
(ここでも一重引用符)
再帰検索に追加するファイルタイプの数を括弧 ( ) で繰り返します。
エイリアスはbashで次のようになります
alias fnd='find . \\( -name '\''*.java'\'' -o -name '\''*.xml'\'' \\) | xargs egrep'