$ awk -F'[./]' '($4+0) != 0' iplist
129.130.100.100
-F '[./]'
Устанавливает разделитель полей на любое из .
или /
. Таким образом, последним октетом всегда будет поле 4.
($ 4 + 0)! = 0
Это логическое условие оценивается как истинное, если четвертый октет равен , а не 0. Поскольку мы включили no явное действие для этого условия, awk выполняет действие по умолчанию, которое выводит строку.
Мы добавляем 0
в четвертое поле, чтобы убедиться, что awk выполняет числовое сравнение, а не сравнение строк.
Вы можете попробовать awk
:
$ awk -F . '$NF !~ /^0/' <file
129.130.100.100
grep -E '^([0-9]{1,3}\.){3}[1-9][0-9]{0,2}$'
[1-9]
проверяет, что первая цифра последнего октет не равен нулю - необязательные цифры после него означают, что вы все еще можете сопоставить более поздние нули ( 129.130.100.100
).
$
гарантирует, что строка заканчивается после последнего октета, поэтому она не будет совпадать ни с чем с маской подсети.
Ваш [^ 1-255]
не выполняет то, что вы хотите по двум причинам:
1
] и 2
) ИЛИ 5
ИЛИ 5
« ^
означает« не в этом диапазоне »Таким образом, он исключает все, чей последний октет начинается с 1, 2 или 5, и соответствует остальным.