• 締切済み

複数存在するgrepについて

自分はSolaris7(8)を使用しているのですが、grepが /bin/grep /usr/bin/grep /usr/xpg4/bin/grep の3つ存在しています。動作的には前者2つが同じようで、最後者がちょっと拡張されているように思われます。思うに大きな違いは"-f|-e"(ファイルにマッチすべき文字列を書いておくことが出来る)が大きいと思うのですが、そこで、 1) /xpg4 というdirectoryはどのような意味合いを持っているのでしょうか?どのような括りでこのディレクトリがあるのでしょうか? 2) 上に書いたオプションの違いのほかに、両者にはどのような違いが有るのでしょうか? 3) 通常、UNIXのユーザーは/usr/bin/grepがデフォルトで使っているというのが「正しい」と思うのですが、後者(xpg4)がデフォルトとして使われる場合にはどのようなケースがあるのでしょうか? --[参考]-- /usr/bin/grep [ -bchilnsvw ] limited-regular-expression [filename ... ] /usr/xpg4/bin/grep [-E | -F ] [-c | -l | -q ] [ -bhinsvwx ] -e pattern_list ... [ -f pattern_file ... ] [ file ... ] ---------- 宜しくお願いいたします。

みんなの回答

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.2

No.1 の回答で触れられていない /bin/grep と /usr/bin/grep について。 /bin は /usr/bin のシンボリックリンクになっているはずです。なので、 /bin/grep と /usr/bin/grep は、同じものです。 % uname -a SunOS CRT1 5.8 Generic_108528-08 sun4u sparc SUNW,Ultra-5_10 % ls -ldi /bin /usr/bin 4 lrwxrwxrwx 1 root root 9 7月 26日 2001年 /bin -> ./usr/bin 105408 drwxr-xr-x 3 root bin 10752 7月 19日 18:54 /usr/bin

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

XPG4は、「X/Open Portability Guide issue 4」の略で、これに準拠したコマンドが、そこに置いてます。 デフォルトでどっち使っているかは環境変数PATHかaliasのよるんで、一概にはどっちとは言えないでしょう。 標準に従うなら、/usr/xpg4/binの方が先に来るべきかと。

参考URL:
http://docs.sun.com/?l=ja&q=xpg4&p=/doc/816-3328/6m9k8pg3q&a=view

関連するQ&A

  • solarisのgrep-これでいいんでしょうか

    はじめまして、yulaliといいます。 solaris(sunOS6?)でログファイル内の特定文字をgrepで引っかけたいのですが 現在実際にさわれる環境にないため確認させて頂きます。 「strA」「strB」「strC」のいずれかを含む行を抜き出す場合は cat target.log | /usr/xpg4/bin/grep -e strA -e strB -e strC で良いんですか? あと、-c や -F の使い方(結果)もlinuxと同じと考えて良いんでしょうか 初歩的な質問ですいませんが、自信がないのでどうかよろしくお願いします。

  • grepの書き方がわかりません。

    Perlの初心者なんですが、以下のようなテーマをもらってプログラムを作っています。  第一引数にディレクトリのパス、第二引数に検索し たいファイル名を指定して第一引数の  パス以下にある全てのディレクトリを検索してファイルがあればそのパスを表示させなさい。 一応できたのですがプログラムの記述の一部がよくわかりません。以下のプログラムは一部です。 local ($dir, $file) = @_; opendir(DIR,$dir) or die @data = readdir(DIR);#ディレクトリの内容を読む closedir(DIR);#ディレクトリを閉じる local @fname = grep {-f "$dir/$_"} @data; local @dname = grep {-d "$dir/$_"} @data; $dir,$fileには第一、第二引数の文字列をいれているのですがそのディレクトリになかにファイル、ディレクトリがないか検索するためgrepを使っています。それで"$dir/$_"の部分の意味がよくわかりません。 この部分は他のサイトであったものを流用しただけなのですがよくわからないまま使ってたまたま動いたから使用しててこのままでは理解していないままなので どうか教えてほしいです。 あともう一点ありましてgrepのところで最初自分で書いた時  local @fname = grep (-f,@data); というように書きました。ファイルが第一引数にあるときは問題なく動作するのですがその下にあるディレクトリにあるとなぜかプログラムが終わりません。 デバッグとして@dataの中身を表示したらそのディレクトリの検索をしてはいるんですが、その中に目当てのファイルがあるはずなのに@dataの中身がからっぽで ファイルがないことになっています。この違いがどうしてもわかりません。  以上の二点がわからないんですがどうかお手数ですがどなたか教えてください。  

    • ベストアンサー
    • Perl
  • grep -l '#!/bin/sh' * が動作しない

    FedoraCore4 bashで カレントディレクトリの複数の hoge.sh ファイルの中身に #!/bin/sh が書き込まれているファイルを調べる為に grep -l '#!/bin/sh' *.sh と実行すると期待通りに表示されました。 しかし、 grep -l '#!/bin/sh' * と実行したのですが次のプロンプトも表示されず止まってしまいました。 しかし、AIX5.2 bashでは grep -l '#!/bin/sh' * を実行すると正しく表示されました。 以下整理いたしました。 FedoraCore4 × grep -l '#!/bin/sh' * ○ grep -l '#!/bin/sh' *.sh AIX5.2 ○ grep -l '#!/bin/sh' * ○ grep -l '#!/bin/sh' *.sh 何故、動作の違いがあるのか教えて頂けないでしょうか。 よろしくお願い致します。

  • solarisのmakeについて

    こんにちは。教えて下さい。 solaris7にperl5.6.1をインストールしようとしている所です。 ./configuerを実行したあと、makeをしないといけないようなのですが、 make とやると、「見つかりません」と言われてしまいます。 PATHが通ってないのかと思い、echo$PATH とやると /usr/bin:/usr/sbinと出てきます。 で、ここでmakeを探したのですが見あたらなかったので、 find / -name make としてやると、 /usr/share/lib/make /usr/ccs/bin/make /usr/xpg4/bin/make の三つが見つかりました。 このうち、Linuxでいう/usr/bin/makeにあたる物はどれなんでしょうか。 それとも、私は基本的に何か勘違いをしているでしょうか。 solarisもLinuxもよくわかっていません。 何かアドバイスいただけると嬉しいです。宜しくお願いいたします。

  • 複数ファイルのシンボリックリンク

    例えば、「/usr/local/hogehoge/bin/」 の中にある実行ファイル全てへのシンボリックリンクを「/usr/local/bin」の中に生成したいとき、何かいい方法はないでしょうか。 「/usr/local/bin」には他にもファイルが入っているので、これ自体はディレクトリのままでお願いします。 イメージとしては、 $ cd /usr/local/bin $ ln -s /usr/local/hogehoge/bin/* というようなことをやりたいです。 (できませんでしたが・・)

  • grepでファイル名を取得したい。

    いま以下の構成になっています。 カレントディレクトリの(ディレクトリを除く)ファイル名を取得し,list.txtに出力する作業をやってます。 そういうオプションがあれば良いのですがなかなか見つかりません。知恵をお貸しください。 list -F |& grep (???) > list.txt -Fでディレクトリの最後に/がつくので,(???)の部分でそれらのファイルを除く,とする方針…?と思ったのですが,うまいやり方が見つかりません。 よろしくお願いします。

  • DNSのcronデーモンが停止してしまう

    みなさん、こんにちは。 タイトルの質問です。 solarisでDNSサーバとメールサーバを兼用しています。 そのサーバでなぜかcrondがストップしてしましました。 # tail -10 /var/cron/olog ! ******* CRON ABORTED ******** (月) 1月 27 20:46:13 2003 ps -ef | grep cron で cron のプロセス(/usr/sbin/cron)が存在していません。 messages, syslog, dmesg には、 cronに関連したメッセージはありませんでした。 # /etc/rc2.d/S75cron start でもたちあがりません。 # cd /etc/rc3.d # sh -x ./S75cron start + /usr/bin/ps -e + /usr/bin/grep cron + /usr/bin/sed -e s/^ *// -e s/ .*// pid= + [ = ] + /usr/bin/rm -f /etc/cron.d/FIFO + [ -x /usr/sbin/cron ] + /usr/sbin/cron # ps -ef | grep cron root 21364 1 0 23:46:15 ? 0:00 /usr/sbin/cron で立ち上がりました。 外部からの侵入形跡はなく、どうしてクーロンが停止したのか 理由が分かりません。 どなたかお分かりになる方、教えてください。 宜しくお願い致します。

  • SJISファイルを日本語でgrep

    UNIX環境で、 SJISファイルを日本語でgrepしたのですが、 ファイル名が出力されずにうまくいきません。 どなたかご教授願えないでしょうか。 [自分のコマンド] find ./ -type f -print | xargs nkf -e | grep 'テスト' とし、日本語は検地できたのですが、 ファイル名が出力されずに困っております。 grep -l としたら、↓のエラーが表示されました。 xargs: nkf: シグナル 13 によって終了しました サブディレクトリも含めて検地したいのですが、 なにかいい方法ありますでしょうか。

  • solaris8へ、rcsのインストールで困っています。

    RCSがインストールしたてなのですが、なぜか、2回目以降のチェックアウトの際に以下のメッセージが表示されて、jうまく使うことが出来ません。 同様の問題にぶち当たったかたはいらっしゃいませんでしょうか? インストールはsolarisのパッケージ形式:     rcs-5.7-sol8-sparc-local を使用、OSはSolaris 8 です。 [現象] > mkdir RCS; touch aaa > ci -l aaa > cat /etc/hosts >> aaa > ci -l aaa /usr/local/bin/diff: オプションが正しくありません -- a 使用法: diff [-bitw] [-c | -e | -f | -h | -n] file1 file2 diff [-bitw] [-C number] file1 file2 diff [-bitw] [-D string] file1 file2 diff [-bitw] [-c | -e | -f | -h | -n] [-l] [-r] [-s] [-S name] directory1 directory2 ci: RCS/aaa,v: diff failed ci aborted [その他] > where diff /usr/local/bin/diff --[*1] /usr/bin/diff   --[*2] /bin/diff --[*3] [*1]最初の状態でこれは無かったので、最初からある[*2][*3]をコピーしてみたが、どっちも意味なく同じメッセージが出て終了してしまいます。

  • gdbをインストールできない

    Solaris10を使っています GDBをインストールしたいのですがうまくいきません gdb6.8をダウンロードして解凍後、 #CC=gdd ./configure は成功しているんですが #make でいろいろ動いたあと最後に make: Fatal error: Command failed for target `all' と出力され、 ためしにmake installしてみましたが いろいろ動いたあと最後に make: Fatal error: Command failed for target `install' となってやっぱりインストールできていません 私はSolaris初心者でなにが原因なのかさっぱりわかりません なにかヒントでもいただければ幸いです ちなみにPATHは PATH: bin PATH: /usr/bin PATH: /etc PATH: /usr/sbin PATH: /usr/ucb PATH: /usr/sfw/bin PATH: /sbin PATH: /usr/xpg4/bin に通しています よろしくお願い致します