Просто укажите, что вы не допускаете 0
s на конце в вашем regex:
$ grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[1-9][0-9]*' file
129.130.100.100
1.160.118.30
91.121.120.228
62.210.111.59
52.90.253.169
Хитрость заключается в \.[1-9][0-9]*
, что означает соответствие .
, затем любое число больше 0 один раз (вы не можете иметь IP, заканчивающиеся на 019
или подобные числа) и затем 0 или более чисел от 0 до 9.
Я бы также использовал grep -E
для упрощения синтаксиса:
grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[1-9][0-9]*' file
Или, еще проще:
grep -Eo '([0-9]{1,3}\.){3}[1-9]\d*' file
И, если ваш grep
поддерживает это, grep -P
для дальнейшего упрощения:
grep -Po '(\d{1,3}\.){3}[1-9]\d*' file