-r スイッチを使用せずに、親フォルダのサブフォルダ内のファイル内のテキスト文字列を grep を使用して検索するにはどうすればよいでしょうか。

-r スイッチを使用せずに、親フォルダのサブフォルダ内のファイル内のテキスト文字列を grep を使用して検索するにはどうすればよいでしょうか。

私は Solaris 10 を使用しており、と の の2 つのgrepバージョンを持っています。 を使用して親ディレクトリのサブフォルダ内のファイル内のテキストを検索する方法についての回答を探していました。すべての回答はまたはスイッチについて説明していますが、私の のバージョンではこれらは利用できません。/usr/bin/usr/xpg4/bingrep-r-Rgrep

答え1

標準 (POSIX) 構文は次のとおりです。

find /path/to/parent -type f -exec grep 'XXX' /dev/null {} +

(これは、常にファイル名が印刷される/dev/nullようにするためですgrep)。これは、Solaris を含むすべての POSIX システムで機能します。これが機能しないことが知られている 90 年代以降のシステムのうち、唯一知られているのは、古い (今では非常に古い) GNU システムです。

GNU は当初、-print0述語と、その代わりと-0なるオプションを導入しました。xargs

find /path/to/parent -type f -print0 | xargs -0 grep 'XXX' /dev/null

現在、これをサポートする実装はいくつかありますが、Solaris はサポートしていません。

-r上記のように、理論的には、ファイルがない場合には実行を回避するオプションを追加したいのですgrepが、それはポータブルそしてこの特定のケースでは、機能的な違いはありません

答え2

GNU を使用する場合grep(インストールされている場合):

ggrep -A3 -B23 'word' -R /log/

これにより、正規表現がword一致するかどうかフォルダー内のすべてのファイルがチェックされ、ファイル パスとともに出力が表示されます。

GNU はgrepこの-Rフラグをサポートしています。

答え3

Solaris では次のようにパスに存在する ggrep を使用するだけです/usr/sfw/bin/ggrep
/usr/sfw/bin/ggrep -H 'search-term' <file-name>*
特定の単語で始まるファイル名のグループで検索用語を検索します。

関連情報