我有一个试图读取的文本文件。可以说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。我究竟做错了什么?
不需要内部循环,并且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"*
将扩展为与给定模式匹配的所有文件名。如果没有匹配该模式的文件名,则该模式将保持未扩展状态。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句