Grep 具有不同模式的多行

Grep 具有不同模式的多行

我在 AIX unix 中有这个 test.debug 文件,其中包含以下字段:

in[  2: ]<0000********0000>  
in[  3: ]<0>  
in[  4: ]<000000020000>  
in[  7: ]<1113>  
in[  7: ]<80402>  
in[ 11: ]<5530>  
in[ 12: ]<181113>  
in[ 12: ]<90254>  
in[ 17: ]<1113>  
in[ 19: ]<960>  
in[ 22: ]<510101510000>  
in[ 24: ]<400>  
in[ 25: ]<4021>  
in[ 26: ]<7011>  
in[ 28: ]<181115>  
in[ 30: ]<000000020000>  
in[ 32: ]<000090>  
in[ 33: ]<589638>  
in[ 37: ]<000000000132>  
in[ 41: ]<75000001>  
in[ 42: ]<01111111111    >  
in[ 49: ]<960>
in[ 56: ]<110000553018111309025406000004>  
in[128: ]<98D6F81BFFFFFFFF>

out[000: ]<ISO9090-9999999902299>

in[129: ]<9420>

我想创建一个能够选择以下内容的脚本:in[ 32: ]<000090>in[ 49: ]<960>out[000: ]<ISO9090-9999999902299>in[129: ]<9420>回显它们。

日志的目录是/var/debug/logs.

答案1

您可以将要查找的所有模式放入一个文件中,并使用 -f 标志在命令行上指定该文件。

引用手册页:

-f file, --file=file
            Read one or more newline separated patterns from file.  Empty pattern lines match every input line.
            Newlines are not considered part of a pattern.  If file is empty, nothing is matched.

所以

grep -r -f <your file> /var/debug/logs

将为您提供与所有文件中的任何行匹配的所有行/var/debug/logs

答案2

您可以只grep匹配您想要匹配的每个错误代码。无需使用,echo因为grep已经输出了匹配行。

grep -E '000090|960|9420|out\[ *002: *\]<ISO9090-9999999902299>' /var/debug/logs/filename

*如果您想搜索文件夹中的所有文件而不是仅搜索一个文件,则可以使用as 文件名。

相关内容