使用循环检查文件中的字符串

使用循环检查文件中的字符串

我试图循环遍历目录中以for语句中指定的字符串开头的文件。在循环中,我想搜索foo文件中的模式字符串。如果在文件中找到该字符串,我echo想要$filename.

#!/ppp/bash

for filename in $(find ~/filesList -type f -name "pge_*")
do
      #If 'foo' located echo $filename
      
done

任何建议将不胜感激。

答案1

用于find执行grep

find ~/filesList -type f -name 'pge_*' -exec grep -lF -- foo {} +

-l列出包含 . 匹配项的文件的名称foo-F意味着表达式foo将被视为固定字符串而不是正则表达式。

答案2

第一个建议 - 不需要findfor循环中使用,它会减慢速度。您可以改为执行以下操作:

for f in ~/filesList/pge_*

一个相当重要的警告是,这个简化版本不会搜索子目录,~/filesList而该find版本会搜索子目录,因此根据您的实际用例,您可能无法简化。

至于在这些文件中的搜索,您需要使用一种grep构造:

if (grep needle haystack > /dev/null 2>&1)
then
  echo $f
fi

grep找到它正在寻找的针时,它返回一个非零值,因此条件评估为 TRUE。我使用 来> /dev/null 2>&1避免看到 的结果grep。如果grep大海捞针,则返回码为0,因此条件为FALSE,绕过该then语句。

相关内容