• ベストアンサー

Bシェルで、ファイル内にある文字列があるかどうかチェックする方法

Bシェルプログラムで、指定したディレクトリ内の全てのファイル内に、ある文字列があった場合、そのファイルを別のあるディレクトリに移動させる。というプログラムを作成したいのです。 指定したディレクトリ内のファイル名を取るとこまではわかったのですが、文字列を検索する術がよくわかりません。 ヒントでも何でも教えてください。 よろしくおねがいします。

質問者が選んだベストアンサー

  • ベストアンサー
  • bikkuri
  • ベストアンサー率33% (23/68)
回答No.3

#2です。 grepによっては、単語単位で検索するオプションがあるようです。 手近の環境でgrep --helpでしらべると -w, --word-regexp force PATTERN to match only whole words というのがありました。 あと、grep '\<address\>' filename ... と言うのが使えるかもしれません。 \<と\>は単語の境界を意味します。 こいつらでダメなら検索する文字列を気合いが入った 正規表現にするしかないかな。

momo63
質問者

お礼

ありがとうございました!!無事にいきました。 本当に助かりました。 ”-g”オプション。覚えておきます。

その他の回答 (2)

  • bikkuri
  • ベストアンサー率33% (23/68)
回答No.2

grep では「エラーがでる」とありますが、どこででるかわかりませんか? とりあえず if [ $FSRC -ne '' ] は$FSRCが空かどうか判定しているはずですが、実際に空の時にエラーになるかと思います。 if [ "$FSRC" -ne '' ] のように変数をダブルクォーテーションで囲む必要があったはずです。

momo63
質問者

補足

ありがとうございました。ダブルコートでくくれば、うまく動きました! しかし、次の問題が。。 grepで検索すると、例えばKEYの1つが「address」としたら、 まちがって「aaddress」とファイル内に入っていても、 addressとして検索OKとなってしまいます。 grepではだめなのでしょうか?

  • madman
  • ベストアンサー率24% (612/2465)
回答No.1

grepで検索してはいかがですか?

momo63
質問者

補足

はい。grep検索をためしてみたところ、エラーがでてしまいます。なぜエラーなのかわかりません。 ちなみに以下のようなプロです。 #!/usr/bin/sh cd "TMP" FDIR=`ls $1` num=1 FNAM=`echo $FDIR | cut -d ' ' -f $num` while [ $FNAM <> '' ] do echo $FNAM num=`expr $num + 1` FNAM=`echo $FDIR | cut -d ' ' -f $num` FGRP=`grep 'address' $FNAM` FSRC=`echo $FGRP` echo $FSRC if [ $FSRC -ne '' ] then echo "aaa" fi done exit 0

関連するQ&A

専門家に質問してみよう