在多个文件中查找多个模式bash
我试图在多个不同的文件中找到多个模式(我有一个模式文件),其中包含很多子文件。 我试图使用退出代码来不输出所有找到的模式(因为我只需要那些没有找到的模式),但是退出代码在我理解它们时不起作用在多个文件中查找多个模式bash,bash,Bash,我试图在多个不同的文件中找到多个模式(我有一个模式文件),其中包含很多子文件。 我试图使用退出代码来不输出所有找到的模式(因为我只需要那些没有找到的模式),但是退出代码在我理解它们时不起作用 while read pattern; do grep -q -n -r $pattern ./dir/ if [ $? -eq 0 ]; then : #echo $pattern ' exists' else echo $pattern " doesn't exist"
while read pattern; do
grep -q -n -r $pattern ./dir/
if [ $? -eq 0 ]; then
: #echo $pattern ' exists'
else
echo $pattern " doesn't exist"
fi
done <strings.tmp
读取模式时;做
grep-q-n-r$pattern./dir/
如果[$?-等式0];然后
:#echo$模式“存在”
其他的
echo$模式“不存在”
fi
完成您可以在bash中使用此选项:
while read -r pattern; do
grep -F -q -r "$pattern" ./dir/ || echo $pattern " doesn't exist"
done < strings.tmp
读取-r模式时的;做
grep-F-q-r“$pattern”。/dir/| | echo$pattern“不存在”
done
- 使用
read-r
安全地读取正则表达式模式
- 在
“$pattern”
中使用引号以避免shell转义
- 无需使用
-n
,因为您正在使用-q
(安静)标志
@anubhava的解决方案应该有效。如果出于某种原因没有,请尝试以下方法
while read -r pattern; do
lines=`grep -q -r "$pattern" ./dir/ | wc -l`
if [ $lines -eq 0 ]; then
echo $pattern " doesn't exist"
else
echo $pattern "exists"
fi
done < strings.tmp
读取-r模式时的;做
行=`grep-q-r“$pattern”。/dir/| wc-l`
如果[$行-等式0];然后
echo$模式“不存在”
其他的
echo$模式“存在”
fi
done
显示文件strings.tmp的示例将非常有用。您正在尝试匹配正则表达式模式还是固定字符串?代码到底是如何不起作用的?请编辑您的问题以提供这些详细信息。是的,thx,命令本身工作,但不在循环中工作。我的意思是,当我使用不存在的模式并检查它时,它是可以的,但是在循环中检查它是不起作用的。没有理由不在循环中工作。显示strings.tmp
in question.test.hello test2.world的内容以及每行上的类似字符串OK,我发现问题在于字符串中的点,这些点被解释为一个特殊的regexp符号。刚刚为此添加了-F标志