有一个日志文件,文件内有多个内容,如下例所示是 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