如何从Linux中的日志文件中获取特定字符

如何从Linux中的日志文件中获取特定字符

有一个日志文件,文件内有多个内容,如下例所示是 U123.log 的内容。我有n条日志..

Accepted password for hoover from 10.0.2.2 port 4792 ss

Id : UN123P 

ID_MTCH : UnixProduction

Accepted password for hoover from 10.0.2.2 port 4792 ss

Accepted password for hoover from 10.0.2.2 port 4792 ss

我们是否可以从每个日志中获取Id : UN123P&ID_MTCH作为 linux 命令的输出。我们有大约 1000 条日志,并且从所有日志中尝试获取仅以 ID :&开头的值ID_MTCH,示例输出如下

Id : UN123P 

ID_MTCH : UnixProduction

请建议

答案1

你可以用grep

grep -i -E 'ID|ID_MTCH' *.log

答案2

根据该模式是否也可以出现在日志行的后面(而不仅仅是在开头),您可能必须使用锚定正则表达式与grep,如

grep '^\(Id\|ID_MTCH\)' *.log

或者

grep -E '^(Id|ID_MTCH)' *.log

这将只匹配那些行开始(作为第一个字符,没有前导空格等!)与提到的模式。

答案3

man grep

 grep  searches  for PATTERNS in each FILE.  PATTERNS is one or patterns
       separated by newline characters, and grep prints each line that matches
       a pattern.

 grep [OPTION...] PATTERNS [FILE...]

 -i, --ignore-case
              Ignore case distinctions, so that characters that differ only in
              case match each other.

使用以下代码

grep -i ID *.log

-i很重要,因为它使 grep 独立于大小写。

答案4

要匹配这两种情况,您也可以使用扩展 grep (egrep)。这与 grep -E 的工作方式相同。

egrep -i -r '^Id|^id_match' *.log

相关内容