在多个文件中找到多个模式bash

时间:2014-11-26 10:56:21

标签: bash

我正在尝试在包含大量子目录的多个不同文件中找到多个模式(我有一个文件)。 我正在尝试使用退出代码不输出找到的所有模式(因为我只需要找不到的模式),但退出代码不能正常理解。

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

2 个答案:

答案 0 :(得分:2)

你可以在bash中使用它:

while read -r pattern; do
  grep -F -q -r "$pattern" ./dir/ || echo $pattern " doesn't exist"
done < strings.tmp
  • 使用read -r安全阅读正则表达式
  • "$pattern"中使用引文以避免shell转义
  • 因为您使用-n(安静)标记,所以无需使用-q

答案 1 :(得分:1)

@ 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