正規表示式符合存取特定連接埠和特定封包的行

正規表示式符合存取特定連接埠和特定封包的行

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

指示

編寫一個正規表示式來匹配存取連接埠 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

相關內容