在同一行中打印来自两种不同模式的匹配正则表达式值



所以我遇到了一个复杂匹配的问题,我试图通过 Tcpdump 输出执行。

从我收到的输出行中,我只想获得两个正则表达式匹配的模式值,但问题是它们没有回答相同的正则表达式模式。

当我将整个输出写入文件然后 greping 时,有时会丢失一些值,这就是我想即时获取值的方式。

我正在执行的命令是:

tcpdump -U -n -i eth2 -v -e -s 1500 '((port 67 or port 68) and (udp[247:4] = 0x63350101))'

我的两个正则表达式:

1(grep -Eo '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2} >' | awk '{print$1}'

2(grep -Eo 'Request from ([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}' | awk '{print$3}'

示例输出:

14:29:16.832592 00:00:00:00:00:00 > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 303: (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 289) 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 11:11:11:11:11:11, length 261, xid 0x4eb03662, Flags [Broadcast]

我需要的输出(附加到文件(:00:00:00:00:00:00, 11:11:11:11:11:11

谢谢!

这是你需要的吗?

$ awk -v FPAT='([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}' -v OFS=', ' '{print $1, $3}' file
00:00:00:00:00:00, 11:11:11:11:11:11

上面使用 GNU awk 用于 FPAT,并且只打印每个输入行中与给定正则表达式匹配的第一个和第 3 个字符串。如果您的输入中有其他行而不是您向我们显示的内容,并且您不希望打印这些行中的任何内容,请对其进行调整以适应,例如:

awk -v FPAT='...' -v OFS=', ' 'NF==3{print $1, $3}' file

最新更新