Solarisで再帰的なgrepを実行するにはどうすればよいですか?
試したところ、次のエラーが発生しました。
-r: invalid option.
Solarisでの再帰grep:
find . -name "*.[chix]" | xargs grep -i -n pattern_to_search
find . | xargs grep whatsyrexpression
またはcpan
を使用して ack
コマンドをインストールします。
-grepのrオプションは、gnugrepでのみ機能します。 xargsを使用したソリューションは優れていますが、いくつかの問題が発生します-find | xargs grepは、スペースを含むファイル名で壊れます。さらに、-xargsはgnuツールでもあるため、インストールされていない可能性があります。
私の知る限り、Solarisでそれを行う適切な方法は次のとおりです。
find . -type f -exec grep ... {} +
また、solaris(まあ、unix)grepには(たとえば)-Eオプションがないので、egrep
を使用する必要があることに注意してください。
運が良ければ、gnugrepもインストールされています。その後、「ggrep "」という名前になります。
ggrepがインストールされている場合、通常は/usr/sfw/bin/ggrep
にあります。 -H -R -I
フラグを使用します:-H
はファイル名を表示し、-R
は再帰検索を、-I
はバイナリファイルを無視します。
例:「Excel」という単語を含むすべてのサブディレクトリを含む、このディレクトリから下のバイナリファイルを除くすべてのファイルのすべての行を表示します。
/usr/sfw/bin/ggrep -H -R -I "Excel" *
find . -type f -exec grep hello {} /dev/null \;
これは、スペースを含むファイル名でも機能します。なぜ/ dev/null?各grepインスタンスは一度に1つのファイルを検査するため、一致するものが見つかった場合はファイル名を出力しません。実際に単一のファイルのみをgrepしている場合は問題ありませんが、findからgrepが繰り返し呼び出されている場合は役に立ちません。追加の/ dev/nullは、検索する追加のダミーファイルとして機能し、grepが一致する行を出力するときに現在のファイル名を先頭に追加します。