linux – 如何grep包含日志文件中特定单词的行?

前端之家收集整理的这篇文章主要介绍了linux – 如何grep包含日志文件中特定单词的行?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个大的日志文件,我试图扫描它的特定单词.一般来说,我需要在我的大日志文件上写一些单词并打印出包含这些单词的行.

我知道如何在文件上做简单的grep.假设我的文件名是abc.log并且我需要找到一个包含单词“hello”的行,那么我总是这样做,它会打印出我的行.

grep -i "hello" abc.log

但是我不知道如何用grep来组合单词.意思是我会有单词列表,我将扫描我的abc.log文件中的所有这些单词,我将打印出单独包含这些单词的行.

#!/bin/bash

data="hello,world,tester"

# find all the lines which contains word hello or world or tester

所以在我上面的shell脚本中,我将拆分我的数据变量并在abc.log中查找hello word,这样任何包含hello word的行,我都会打印出来,类似于world和tester.

我试图使这个非常通用,这样我只需要在数据变量中添加我的单词列表,而无需触及grepping日志的实际逻辑.

解决方法

如果将模式存储在一个文件中,每行一个,则可以使用grep -f file-with-patterns文件搜索.log

从手册页:

-f FILE,--file=FILE
          Obtain  patterns  from  FILE,one  per  line.   The  empty file
          contains zero patterns,and therefore matches nothing.   (-f  is
          specified by POSIX.)

编辑2018:

自从我写这篇文章以来,我已经意识到以下有趣的边缘情况:

>您可以使用-f – 从管道中读取模式列表(如果您不需要stdin,即您在grep的命令行上指定了文件)或-f<()(在任何情况下)>如果传递数百个模式,grep的性能开始严重失败.如果您的用例太疯狂,请考虑生成并立即执行sed(或其他语言)脚本,尽管这可能会导致重叠模式出现问题.

猜你在找的Linux相关文章