web-dev-qa-db-ja.com

grep-rがSolarisで機能しない

Solarisで再帰的なgrepを実行するにはどうすればよいですか?

試したところ、次のエラーが発生しました。

-r: invalid option.
3
Vikash Jindal

Solarisでの再帰grep:

find . -name "*.[chix]" | xargs grep -i -n pattern_to_search
7
Sandeep Singh

find . | xargs grep whatsyrexpressionまたはcpanを使用して ack コマンドをインストールします。

2
mkb

-grepのrオプションは、gnugrepでのみ機能します。 xargsを使用したソリューションは優れていますが、いくつかの問題が発生します-find | xargs grepは、スペースを含むファイル名で壊れます。さらに、-xargsはgnuツールでもあるため、インストールされていない可能性があります。

私の知る限り、Solarisでそれを行う適切な方法は次のとおりです。

find . -type f -exec grep ... {} +
  • 最後に、すべてのgrep呼び出しに多くのファイルが渡されるため、比較的高速になります。

また、solaris(まあ、unix)grepには(たとえば)-Eオプションがないので、egrepを使用する必要があることに注意してください。

1
user7385

運が良ければ、gnugrepもインストールされています。その後、「ggrep "」という名前になります。

ggrepがインストールされている場合、通常は/usr/sfw/bin/ggrepにあります。 -H -R -Iフラグを使用します:-Hはファイル名を表示し、-Rは再帰検索を、-Iはバイナリファイルを無視します。

例:「Excel」という単語を含むすべてのサブディレクトリを含む、このディレクトリから下のバイナリファイルを除くすべてのファイルのすべての行を表示します。

/usr/sfw/bin/ggrep -H -R -I "Excel" *
1
thomasa88
find . -type f -exec grep hello {} /dev/null \;

これは、スペースを含むファイル名でも機能します。なぜ/ dev/null?各grepインスタンスは一度に1つのファイルを検査するため、一致するものが見つかった場合はファイル名を出力しません。実際に単一のファイルのみをgrepしている場合は問題ありませんが、findからgrepが繰り返し呼び出されている場合は役に立ちません。追加の/ dev/nullは、検索する追加のダミーファイルとして機能し、grepが一致する行を出力するときに現在のファイル名を先頭に追加します。

0
ubiyubix