
読みたいテキストファイルがあります。 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"*
指定されたパターンに一致するすべてのファイル名に展開されます。パターンに一致するファイル名がない場合、パターンは拡張されていません。