从日志中搜索模式

从日志中搜索模式

日志的格式如下:

Junk Junk Junk : Junk Junk Junk:IP/Port Junk Junk

我想使用进行搜索IP,输出应该只是IP/Port该日志文件中每行的一部分。

我尝试了所有可能的组合grepcut以及我awk所知道的一切bash:D 那么这可能吗?或者我必须继续使用一些日志解析工具?

编辑:请注意,格式不完全相同,位置Junk:IP/Port可能会发生变化,因此无法使用awk '{print $7}'

更新:添加示例日志

DATE NAME-FIREWALL : %RULE-NUM: Teardown TCP connection PKT-NUM for LAN1:X.X.X.X/XX to LAN2:X.X.X.X/XX duration 0:0:0 bytes XXXX TCP FINs
DATE NAME-FIREWALL : %RULE-NUM: Built inbound TCP connection PKT-NUM for LAN1:X.X.X.X/XX (X.X.X.X/XX) to LAN2:X.X.X.X/XX (X.X.X.X/XX)

我需要搜索并获取 LAN2 旁边的 IP/端口部分。

答案1

关于什么

awk '{for(i=1;i<=NF;i++) if ( $i ~ /[^:]*:/ ) { n=split($i,A,":"); if (length(A[2]) && n==2) print A[2] ; }} ' b.txt
X.X.X.X/XX
X.X.X.X/XX
X.X.X.X/XX
X.X.X.X/XX

编辑:(使用局域网)

awk '{for(i=1;i<=NF;i++) if ( $i ~ /[^:]*:/ ) { n=split($i,A,":"); if (length(A[2]) && n==2) printf "%s -- %s\n",A[1], A[2] ; }} ' b.txt
LAN1 -- X.X.X.X/XX
LAN2 -- X.X.X.X/XX
LAN1 -- X.X.X.X/XX
LAN2 -- X.X.X.X/XX

答案2

尝试一下这个:

grep -Po 'LAN2:\K(\d{1,3}.){3}\d{1,3}/\d*' file

这会查找一个块PATTERN:ipdigits.ipdigits.ipdigits.ipdigits/digits并打印该ipdigits.ipdigits.ipdigits.ipdigits/digits部分(\K“清理”匹配)。它表示ipdigits必须包含 1 到 3 个字符。可以应用更多过滤器(匹配 1 到 255)。

测试

$ cat a
Junk Junk Junk : Junk Junk LAN2:123.123.2.2/56 Junk Junk
Junk Junk Junk : Junk Junk LAN3:22.33.44.55/22 Junk Junk
$ grep -Po 'LAN2:\K(\d{1,3}.){3}\d{1,3}/\d*' a
123.123.2.2/56

相关内容