正则表达式匹配访问特定端口和特定数据包的行

正则表达式匹配访问特定端口和特定数据包的行

我是 Linux 的新手,唯一能让它工作的方式是使用 awk 命令,不幸的是主要指示指定不要使用 awk。

这就是我得到的

#!/bin/sh
#comment Write a single RegEx to match the lines that access port 22 and only those packets
grep '\s22\s' hw0206.txt | awk {'print $4'}
#comment grep returns the whole line with matched string
#comment \s22\s regular expression to match any string containing 22 preceded or succeeded by white space

指示

编写一个 RegEx 来匹配访问端口 22 的行以及仅这些数据包,然后返回 IP 地址

Input file (hw0206.txt) Expected output of script
date time protocol ip-address port packet-size
2022-02-21 19:22:19 TCP 22.101.2.24 22 24
2018-22-22 02:25:12 UDP 10.221.7.22 2135 222
2200-05-22 22:26:22 UDP 22.122.6.62 2160 22
2012-22-20 15:43:22 TCP 10.121.7.222 22 122
1228-02-10 02:22:02 UDP 22.102.2.62 2089 22 
date time protocol ip-address port packet-size
2022-02-21 19:22:19 TCP 22.101.2.24 22 24
2018-22-22 02:25:12 UDP 10.221.7.22 2135 222
2200-05-22 22:26:22 UDP 22.122.6.62 2160 22
2012-22-20 15:43:22 TCP 10.121.7.222 23 122
1228-02-10 02:22:02 TCP 22.102.2.62 22 22
2100-05-25 21:26:22 UDP 22.112.63.62 2122 22

答案1

具有积极展望,你可以匹配一些不应该成为结果一部分的东西:

grep -Po '(\d+\.){3}\d+(?=\s22\s)' hw0206.txt

在这种情况下,我更喜欢awk提供更易读的解决方案:

awk '$5 == 22 {print $4}' hw0206.txt

相关内容