web-dev-qa-db-ja.com

単一の組み込みコマンドで、サブディレクトリ間でファイル内の部分文字列を検索しますか?

Windowsでは、すべてのサブディレクトリのすべてのファイルから文字列を検索したい場合は、次のようにします。

findstr /C:"the string" /S *.h

ただし、Linux(Ubuntuなど)では、findxargs、およびgrepを含むパイプされたコマンド以外に方法はありません(例はこのページにあります:- サブディレクトリを再帰的にgrepするにはどうすればよいですか? )。しかし、私の質問は異なります:シェルスクリプトを記述しなくても、この魔法を通じて機能する単一の組み込みコマンドはありますか?

10
Guido Domenici

GNU grepでは、サブディレクトリ全体を再帰的に検索できます。

grep -r --include='*.h' 'the string' .
19
wag

grep -r searchpattern /path/to/start/in

どこ /path/to/start/in/は単に ". "現在のディレクトリ。

2
mattdm

番号。 find -name \*.h -print0 | xargs -0 grep -l 'the regex'は、魔法のようなものです。

1
glenn jackman

この魔法を介して動作する単一の組み込みコマンドはありますか?

いいえ、そのようなコマンドが存在すると仮定することはできません

Unixには多くの異なる実装があり、それぞれに異なる癖があります。 POSIX、共通の分母(およびUnices全体の標準に最も近いもの) grepにそのようなオプションを指定しません

他の回答で述べたように、GNUのgrepの実装には、必要なことを行う非標準のオプションがあります。この特定の実装はLinuxシステムでは一般的である可能性がありますが、一部のLinuxシステムでさえ、Unixでの使用を想定することはできません。

最後に、一度にすべてを実行しようとする1つの大きなモノリシック実行可能ファイルの使用よりも、いくつかのプリミティブプログラムの組み合わせを優先するのは nix哲学 であることを述べておきます。

あなたの場合、ファイルシステムのクロールとストリーム内の一致する正規表現は、2つの別々のタスクです。それぞれを別々のプログラムで扱うのは正常なことです。

0
rahmu

指定されたディレクトリから文字列を検索するには、以下のコマンドを使用します

find <fullDirectoryPath> -name '*' -exec grep -l '<StringToFind>' {} \;

例えば:

find /apps_bev/apps/xfer/export/02210 -name '*' -exec grep -l '38221000001032' {} \;
0
Yogesh