Regex para hacer coincidir líneas que acceden a un determinado puerto y paquetes particulares

Regex para hacer coincidir líneas que acceden a un determinado puerto y paquetes particulares

Nuevo en Linux y la única forma en que puedo hacer que esto funcione es usando el comando awk, desafortunadamente las instrucciones principales especifican no usar awk.

Esto es lo que conseguí

#!/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

instrucciones

Escriba una única expresión regular para que coincida con las líneas que acceden al puerto 22 y solo esos paquetes, y luego devuelva la dirección 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

Respuesta1

Con positivomirar hacia el futuro, puedes hacer coincidir algo que no debería ser parte del resultado:

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

En este caso, preferiría awkcuál ofrece una solución más legible:

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

información relacionada