ファイルを読み、ファイル名と一致

ファイルを読み、ファイル名と一致

読みたいテキストファイルがあります。 foo.txtに次のものが含まれているとします。

foo.org
foo.com
foo.net
foo
bar.org
bar.com
bar
blah.org
example.org

このファイルを読み、ファイル名(ファイルの内容ではない)のパターンマッチングのためにgrepを実行する必要があります。

すべてのファイル名は次のようになります。

foo.org.db foo.com.db bar.org.db

(すべてゾーンファイルなので、最後に.dbがあります。)

私は似たようなことを試してきました。

#!/bin/bash
FILE=foo.txt
DIR=/path/to/zone/files
MATCH=match.txt
NO_MATCH=nomatch.txt

read -r line; do
   for a in $DIR
   do  
       if [ line =~ $a ]
       then
          echo "$line" >> "$MATCH"
       else
          echo "$line" >> "$NO_MATCH"
   done
done< $FILE 

このスクリプトを実行すると、$ MATCHは生成されたとマークされますが、$ NO_MATCHは表示されません。そして条件がうまくいかないようです。テキストファイルと一致しないコンテンツを作成する必要があります。たとえば、example.orgが$ FILE変数に書き込むが、一致するファイル名がない場合(example.org.dbなし)、example.orgは$ NO_MATCHを書き込む必要があります。私は何が間違っていましたか?

ベストアンサー1

内部ループは必要なく、欠落していますwhile

while read -r name; do
    files=$( echo "$DIR/$name"* )
    if [[ "$files" != "$DIR/$name"* ]]; then
        echo "$name" >>"$MATCH"
    else
        echo "$name" >>"$NO_MATCH"
    fi
done <"$FILE"

echo "$DIR/$name"*指定されたパターンに一致するすべてのファイル名に展開されます。パターンに一致するファイル名がない場合、パターンは拡張されていません。

おすすめ記事