solarisのgrepで再帰検索が機能しない


20

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

マシンを制御できないのでgrep、再帰検索を実行する方法はありますか?それとも私はパイプに出力の必要がありますかfindにはgrep


1
どのSolarisリリースを使用していますか?
jlliagre

回答:


4

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

ここからGNU grepをダウンロードし、コンパイルしてインストールできます。

rootアクセスがある場合は、configure --prefix = / usr / localを実行することをお勧めします。このようなユーティリティは/ usr / localにインストールされます。

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


--prefix=${HOME}}/.localおそらくより賢明です...ホームディレクトリsharelibフォルダを乱雑にする必要はありません
-jpaugh

1
1人の男が雑然としているのは別の男の組織です
bsd

間違いない!正直に言って、「share?それはジャンクディレクトリになるはずだ!」rm -rfど!
jpaugh

31

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

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

ただし、Gnu grepはおそらくマシンにすでにインストールされています。

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


-nameオプションを利用することもできますfind
sleepyweasel

@sleepyweasel -nameはファイル内を検索せず、OPが要求するものではないファイル名のみを検索します。
-jlliagre

6

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

たとえば、現在のディレクトリからすべてのサブディレクトリまで「mysearchstring」を検索し(-R)、一致するファイル名とパスを表示し(-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


1
少なくとも私のシステムでggrepは、確かにGNU grepです。ありがとう!
jpaugh

3

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


3

Solaris grepには-rオプションがありません。

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

find . -type f | xargs grep 'sometext'

2
GNU grepをコンパイルしてホームディレクトリの下のどこかにインストールするために、「システムを制御する」必要はありません。
キーストンプソン

@KeithThompson指摘してくれてありがとう。答えを修正しました。
サチンディベカー

これは、名前のパターンに一致するすべてのファイルを検索し、ファイルで結果を表示するのに非常に便利です。例 find /opt/ -name "*.sh" -type f | xargs grep "start"
アンダーバース

1

はい、GNU grepが必要です。個人的には、「-r」フラグは見逃しません。これはfind、との組み合わせでも同じことができるためです。grepしかし、これは、GNUツールをSolarisボックスで使用できることがベストプラクティスだと思います。だからここに行きます:

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

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

Solaris 11を使用している場合は、はるかに簡単です。GNUツールは通常デフォルトでインストールされますが、すべてがローカルゾーンに伝播されるわけではありません。Solaris 11のパッケージングシステムである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の世界とは異なることをしばしば主張しますが、実際にその必要はありません。実行して、デフォルトのインストールの一部にするだけです。後悔することはありません。


「マシンを制御できないと思ったら...」と言った部分を読んでいるかどうかはわかりませんが、これは誰かにとって有益な情報であると確信していますが、私が尋ねた質問に対する答えはほとんどありません。
エリックウィルソン

システム管理者向けの情報です。彼はあなたに不自由なマシン私見を与えました。これらはデフォルトでインストールする必要があります。しかし、はい、あなたは正しいです、情報はおそらくこの場所に来てあなたの質問を読む他の人たちと同じくらい意図されていました。今日はGNU grepがなく、明日はGNU tarなどがありません。まだわかりません。:
ペテル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.