web-dev-qa-db-ja.com

ソラリスのgrepで再帰検索が機能しない

Solarisサーバーでgrep -rが機能しないことがわかりました。これがgrepを使用する通常の方法です。 egrepも同じ動作をするようです。

マシンを制御できない場合、grepに再帰検索を実行させる方法はありますか?または、findの出力をgrepにパイプする必要がありますか?

20
Eric Wilson

私はSolarisに慣れていませんが、GNU/linuxからSolarisに切り替えると、ほとんどのコマンドの動作がわずかに異なることがわかります。 GNU Unixツールのバージョンには、「独自の」Unixにはない追加機能があります。

GNU grep(s) here をダウンロードして、コンパイルしてインストールできます。

Rootアクセス権がある場合は、configure --prefix =/usr/localを実行すると、ユーティリティが/ usr/localにインストールされます。

Rootアクセス権がない場合は、configure --prefix = $ {HOME}を実行すると、ユーティリティがホームディレクトリにインストールされます。

4
bsd

findを使用する場合は、これが最も速い方法です。

find . -type f -exec grep pattern {} +

ただし、Gnu grepはすでにマシンにインストールされている可能性が非常に高いです。

これは、Solaris 11のデフォルトインストールの/usr/gnu/bin/grepに含まれています。 /usr/sfw/bin/ggrepにあるSolaris 10でも同じです。古いリリースでは、サンフリーウェアまたは他のリポジトリからインストールされた可能性があります。一般的な場所については、/usr/local/bin/grepおよび/opt/csw/bin/grepを確認してください。

32
jlliagre

インストールされている場合は、代わりにggrepを使用してください。

例えば。現在のディレクトリからすべてのサブディレクトリ(-R)まで「mysearchstring」を検索し、一致するファイル名とパス(-H)を表示し、バイナリファイル(-I)を無視します。コマンドの最後の*を忘れないでください。

/usr/sfw/bin/ggrep -H -R -I "mysearchstring" *

ggrepは/usr/sfw/binにあります。EXPORTコマンドを使用してプロファイルに追加できるため、コマンドラインから直接呼び出すことができます。

PATH=$PATH:/usr/sfw/bin
export PATH

Solarisバージョン:SunOS 5.10 Generic_147440-13 Sun4u sparc SUNW、SPARC-Enterprise

6
Underverse

Solaris grepには-rオプション。

次のコマンドを使用できます。

find . -type f | xargs grep 'sometext'
3
Sachin Divekar

スタンドアロンのack Perlスクリプトを http://betterthangrep.com/ からダウンロードし、$HOME/bin、代わりにそれを使用することを学びます。宣伝されているように、毎日の開発作業の多くの用途でgrepよりも優れていることがわかりました。

3
alanc

はい、GNU grepが必要になります。findgrepしかし、これは、GNUツールをSolarisボックスで使用できるようにすることが私がベストプラクティスと見なすものであることを思い出させます。

インターネット上のさまざまな場所からソースコードをダウンロードして、自分でビルドすることはしません。それは必要ありません。 Solarisに通常のGNUツールを使用可能にしたいだけの場合は、次のようにします。

Solaris 10を使用している場合は、Solaris 10コンパニオンディスクを取得する必要があります。これは以前はSunによって配布されていましたが、現在は here で提供されています。個人的には、このディスクの内容、または少なくとも最も重要なGNUパーツをインストールすることを常に習慣にしています。新しいサーバーのJumpStart(または使用するもの)の一部にしてください)組織!

Solaris 11を使用している場合、生活ははるかに簡単です。 GNUツールは通常デフォルトでインストールされますが、すべてがローカルゾーンに伝達されるわけではありません。Solaris11のパッケージングシステムであるIFSを使用すると、作業が非常に簡単になるため、実際に移動する必要があります。 Solaris 11へ(他にも多くの理由があります。)どのゾーンでも常に利用できるようにしておくべきパッケージのリストは次のとおりです。

 pkg:// solaris/archiver/gnu-tar 
 pkg:// solaris/developer/gnu-binutils 
 pkg:// solaris/diagnostic/top 
 pkg:// solaris/file/gnu-coreutils 
 pkg:// solaris/file/gnu-findutils 
 pkg:// solaris/text/gawk 
 pkg:/ /solaris/text/gnu-diffutils
pkg://solaris/text/gnu-grep
pkg://solaris/text/gnu-sed

また、ホストを開発/ビルドの目的で使用する場合は、追加することをお勧めします。

 pkg:// solaris/developer/build/gnu-make 
 pkg:// solaris/developer/build/make 
 pkg:// solaris/developer/gcc-45 
 pkg:// solaris/system/header 
 pkg:// solaris/developer/build/autoconf 
 pkg:// solaris/developer/build/automake-110 

個人的には、上記の(開発ツールよりも少ない可能性があります)を、会社の新しいサーバー/ゾーンのデフォルトインストールの一部にします。 Solarisのシステム管理者は、Linuxの世界とは違うと主張することがよくありますが、実際にそうする必要はありません。それを実行して、それをデフォルトのインストールの一部にしてください。後悔はしません。

1
peterh