Bash 查找没有搜索项的文件

Bash 查找没有搜索项的文件,bash,Bash,我正在寻找一种快速的方法来搜索数千个日志文件,以找到有错误的日志文件。不幸的是,对于我来说,只有那些成功完成的任务才会标记为作业完成期限,而崩溃的任务则不会包含这一行 我将这些作业的确切名称存储为文件名。尽管这样做很有用: grep "Job Completed" * > completeJobs.txt 在我的日志目录中,我确实希望知道不包含此行的作业的文件名 有没有对上面的grep命令的补充来解决我的问题 谢谢您的阅读。只要试一下就可以了 grep -vl 'Job Complete

我正在寻找一种快速的方法来搜索数千个日志文件,以找到有错误的日志文件。不幸的是,对于我来说,只有那些成功完成的任务才会标记为作业完成期限,而崩溃的任务则不会包含这一行

我将这些作业的确切名称存储为文件名。尽管这样做很有用:

grep "Job Completed" * > completeJobs.txt
在我的日志目录中,我确实希望知道不包含此行的作业的文件名

有没有对上面的grep命令的补充来解决我的问题

谢谢您的阅读。

只要试一下就可以了

grep -vl 'Job Completed' * > notCompletedJobs.txt

根据您的需要

来自man grep:

反转匹配的意义,以选择不匹配的线-v由POSIX指定

   -l, --files-with-matches
抑制正常输出;而是打印输出通常来自的每个输入文件的名称。扫描将在第一次匹配时停止-l由POSIX指定

   -l, --files-with-matches
检查手册页,可以使用-v选项反转匹配

grep -v "Job Completed" * > uncompletedJobs.txt

您可以使用-v开关来反转grep搜索

 grep -v "Job Completed" * > incompleteJobs.txt
您需要选项-L:

抑制正常输出;而是打印每个输入的名称 通常不会打印输出的文件


建议您在寻求帮助之前阅读命令手册页-这确实是最好的方法。我可能没有明确说明的是,这些日志文件中的行表示已完成作业以外的内容。如果我只是使用-vl命令,我仍然会获取包含作业完成行以及其他文本行的文件。相反为了一个完整的解决方案,我做了以下工作:grep-l Job Completed*>../temp1 grep-vl Job Completed*>../temp2 cat temp1 temp2 | sort | uniq-u>Job未完成,我知道第二个grep函数可以很好地替换为ls命令,但为了获得更清晰的解决方案,我是这样写的。@user1575175你能把这个作为你自己的问题的答案,并标记为正确吗?这是一个好答案!
 grep -v "Job Completed" * > incompleteJobs.txt
grep -L 'Job Completed' * >../jobsNotCompleted