プロが教えるわが家の防犯対策術!

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

A 回答 (3件)

#2です。


grepによっては、単語単位で検索するオプションがあるようです。
手近の環境でgrep --helpでしらべると
-w, --word-regexp force PATTERN to match only whole words
というのがありました。

あと、grep '\<address\>' filename ...
と言うのが使えるかもしれません。
\<と\>は単語の境界を意味します。

こいつらでダメなら検索する文字列を気合いが入った
正規表現にするしかないかな。
    • good
    • 0
この回答へのお礼

ありがとうございました!!無事にいきました。
本当に助かりました。

”-g”オプション。覚えておきます。

お礼日時:2003/07/18 13:55

grep では「エラーがでる」とありますが、どこででるかわかりませんか?



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

この回答への補足

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

補足日時:2003/07/17 09:08
    • good
    • 0

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

補足日時:2003/07/16 19:17
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!