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
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 awk
cuál ofrece una solución más legible:
awk '$5 == 22 {print $4}' hw0206.txt