Estou assumindo que os endereços IP estão no formato típico de X.X.X.X , em que X está entre [0,255]. Sabendo disso, o grep pode fazer o trabalho de forma admirável:
grep -oP '(0|[01]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])(\.(0|[01]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])){3}' filename.txt
(0|[01]?[0-9]{1,2}|2[0-4][0-9]|25[0-5]) corresponderá a qualquer número entre 0 e 255, incluindo zeros à esquerda - por exemplo, 0, 255, 019, etc. Conforme escrito, no entanto, ele corresponderá a coisas como 1.1.1.1.5 (cinco octetos). Isso também não rastreia endereços IPV6.
Se você espera que os logs contenham APENAS endereços IP válidos que parecem X.X.X.X , e podemos ASSUMIR que X não será inválido, você pode usar uma expressão muito mais simples:
grep -oP '\d{1,3}(\.\d{1,3}){3}' filename.txt