【问题标题】:Find files that do not have search term查找没有搜索词的文件
【发布时间】:2013-03-12 15:02:18
【问题描述】:

我正在寻找一种快速的方法来搜索数千个日志文件以找到有错误的文件。对我来说不幸的是,只有成功完成的会标有“作业已完成”一词,而崩溃的不会包含这一行。

我将这些作业的确切名称存储为文件名。虽然执行以下操作很有用:

grep "Job Completed" * > completeJobs.txt

在我的日志目录中,我真的很想知道不包含这一行的作业的文件名。

上面的 grep 命令有补充来解决我的问题吗?

感谢阅读。

【问题讨论】:

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

标签: bash


【解决方案1】:

你想要选项-L:

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

grep -L 'Job Completed' * >../jobsNotCompleted

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      查看man页面,可以使用-v选项反转匹配

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

      【讨论】:

        【解决方案4】:

        试一试

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

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

        根据你的需要

        注意

        来自man grep

            -v, --invert-match
        

        反转匹配的感觉,选择不匹配的行。 (-v 由 POSIX 指定。)

           -l, --files-with-matches
        

        抑制正常输出;而是打印通常会从中打印输出的每个输入文件的名称。扫描将在第一次匹配时停止。 (-l 由 POSIX 指定。)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-11-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-05-27
          • 1970-01-01
          • 1970-01-01
          • 2013-11-15
          相关资源
          最近更新 更多