grep for IP without last octet as 0 [duplicate]

0
05.07.2016, 09:36
3 ответа

Ответ на исходную версию вопроса

$ awk -F'[./]' '($4+0) != 0' iplist
129.130.100.100

Как это работает

  • -F '[./]'

    Устанавливает разделитель полей на любое из . или / . Таким образом, последним октетом всегда будет поле 4.

  • ($ 4 + 0)! = 0

    Это логическое условие оценивается как истинное, если четвертый октет равен , а не 0. Поскольку мы включили no явное действие для этого условия, awk выполняет действие по умолчанию, которое выводит строку.

    Мы добавляем 0 в четвертое поле, чтобы убедиться, что awk выполняет числовое сравнение, а не сравнение строк.

1
28.01.2020, 02:34

Вы можете попробовать awk :

$ awk -F . '$NF !~ /^0/' <file
129.130.100.100
1
28.01.2020, 02:34
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, и соответствует остальным.

0
28.01.2020, 02:34

Теги

Похожие вопросы