我正在为琐碎的任务寻找简单的解决方案。
我的bash脚本正在循环生成一些log.txt文件的几个文件夹。如果每个案例中的某些操作在每个日志中成功执行,则句子“单位正常”的字符串应该出现在log.txt中的某个位置,但是每个log.txt中的实际位置(字符串的精确数字)是不同的!
我需要在循环中放入一些条件(可能使用IF)来检查该句子是否实际存在于日志文件中的某个位置,如果是这样的话 - 在我的脚本执行的终端中打印“一切正常”循环特定文件夹的时刻,否则(如果日志中没有字符串)打印smth就像“坏消息”!
将感谢不同的解决方案,尤其是如何在给定的日志文件中查找所选短语的字符串。
谢谢!
格列勃
答案 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