읽으려고 하는 텍스트 파일이 있습니다. 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"*
주어진 패턴과 일치하는 모든 파일 이름으로 확장됩니다. 패턴과 일치하는 파일 이름이 없으면 패턴은 확장되지 않은 상태로 유지됩니다.