使用bash在txt文件中搜索

时间:2016-04-26 18:30:10

标签: bash loops if-statement text

我正在为琐碎的任务寻找简单的解决方案。

我的bash脚本正在循环生成一些log.txt文件的几个文件夹。如果每个案例中的某些操作在每个日志中成功执行,则句子“单位正常”的字符串应该出现在log.txt中的某个位置,但是每个log.txt中的实际位置(字符串的精确数字)是不同的!

我需要在循环中放入一些条件(可能使用IF)来检查该句子是否实际存在于日志文件中的某个位置,如果是这样的话 - 在我的脚本执行的终端中打印“一切正常”循环特定文件夹的时刻,否则(如果日志中没有字符串)打印smth就像“坏消息”!

将感谢不同的解决方案,尤其是如何在给定的日志文件中查找所选短语的字符串。

谢谢!

格列勃

3 个答案:

答案 0 :(得分:1)

要将测试应用于整个目录,可以使用简单的for循环。如果需要递归处理目录,可以使用while read -r...的结果提供find循环。在任何一种情况下,搜索都是相似的。以下是搜索日志文件的单个目录的示例:

$ for i in dirname/*; do grep -q 'The unit is OK' "$i" && \
echo "$i - Everything is OK" || echo "$i - Bad news"; done

搜索dirname我的测试dat目录的位置,示例结果如下:

dat/test.properties - Bad news
dat/test_pph_s.txt - Bad news
dat/testlog-1.txt - Everything is OK
dat/testlog-2.txt - Everything is OK
dat/testlog-3.txt - Everything is OK

testlog-X.txt文件包含的位置,例如:

$ cat dat/testlog-1.txt
The unit is OK

答案 1 :(得分:0)

如果没有更多信息(您正在寻找的字符串示例,潜在的文件名,您已经拥有的任何bash脚本),很难提供具体的建议。

尽管如此,如果您有一组已知的潜在字符串,您可以在循环时检查它们是否存在

if [ `grep -E (pattern1|pattern2|pattern3) $FILE | wc -l` -gt 0 ]; then
    # String was found in file
fi

答案 2 :(得分:0)

扫描具有某种模式的文件(例如:log.txt)

for file in $(find /path/to/logs -name "log.txt")
do
  grep -q "The unit is OK" $file && echo "$file: Everything is OK" || echo "$file: Bad news"
done