所以我遇到了一个复杂的匹配问题,我试图通过Tcpdump输出执行该操作。
从我收到的输出行中,我只想获得两个正则表达式匹配的模式值,但是问题是它们没有回答相同的正则表达式模式。
当我将整个输出写入文件然后进行grepping时,有时会丢失某些值,这就是我想即时获取值的方式。
我正在执行的命令是:
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
谢谢!
答案 0 :(得分:1)
这是您需要的吗?
$ 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,仅从与给定regexp匹配的每条输入行中打印第一和第三字符串。如果您输入的内容不是您向我们展示的其他内容,并且您不希望打印这些内容,请对其进行调整,例如:
awk -v FPAT='...' -v OFS=', ' 'NF==3{print $1, $3}' file