读取文件并与文件名匹配

读取文件并与文件名匹配

我有一个正在尝试读取的文本文件。假设 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"*将扩展到与给定模式匹配的所有文件名。如果没有与该模式匹配的文件名,则该模式将保持未展开状态。

相关内容