- ベストアンサー
Bシェルで、ファイル内にある文字列があるかどうかチェックする方法
Bシェルプログラムで、指定したディレクトリ内の全てのファイル内に、ある文字列があった場合、そのファイルを別のあるディレクトリに移動させる。というプログラムを作成したいのです。 指定したディレクトリ内のファイル名を取るとこまではわかったのですが、文字列を検索する術がよくわかりません。 ヒントでも何でも教えてください。 よろしくおねがいします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#2です。 grepによっては、単語単位で検索するオプションがあるようです。 手近の環境でgrep --helpでしらべると -w, --word-regexp force PATTERN to match only whole words というのがありました。 あと、grep '\<address\>' filename ... と言うのが使えるかもしれません。 \<と\>は単語の境界を意味します。 こいつらでダメなら検索する文字列を気合いが入った 正規表現にするしかないかな。
その他の回答 (2)
- bikkuri
- ベストアンサー率33% (23/68)
grep では「エラーがでる」とありますが、どこででるかわかりませんか? とりあえず if [ $FSRC -ne '' ] は$FSRCが空かどうか判定しているはずですが、実際に空の時にエラーになるかと思います。 if [ "$FSRC" -ne '' ] のように変数をダブルクォーテーションで囲む必要があったはずです。
補足
ありがとうございました。ダブルコートでくくれば、うまく動きました! しかし、次の問題が。。 grepで検索すると、例えばKEYの1つが「address」としたら、 まちがって「aaddress」とファイル内に入っていても、 addressとして検索OKとなってしまいます。 grepではだめなのでしょうか?
- madman
- ベストアンサー率24% (612/2465)
grepで検索してはいかがですか?
補足
はい。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
お礼
ありがとうございました!!無事にいきました。 本当に助かりました。 ”-g”オプション。覚えておきます。