Здесь я пытаюсь искать числа в пределах от от 0 до 255, но некоторые случайные числа подобраны вместо этого. Примеры:
1335.0.1.234
или
241.92.88.103
Полужирный числа, которые подобраны.
Это число, которое я получаю, имеет число, которое превышает 255, но все еще подобрано, потому что оно видит 1 как автономное число (?). Даже если число не превышает 255, случайные части числа подобран.
Команда, которую я использую:
grep -E '[0-255]' asd.txt
Вы неправильно понимаете регулярные выражения: [0-255]
не означает "десятичного числа между 0
и 255
", но означает "один из 0
, 1
, 2
или 5
".
Это - корректное регулярное выражение:
\b(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\b
, Если Вы пробуете, необходимо получить следующий вывод:
$ grep -E '\b(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\b' asd.txt 1335.0.1.234 241.92.88.103
(Все числа кроме 1335 были подобраны.)
<час> Бонусная подсказка: , Если Вы хотите только подобранные числа (без точек и несопоставленных чисел), используйте -o
:
$ grep -Eo '\b(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])\b' asd.txt
0
1
234
241
92
88
103
<час> Другая подсказка: , Если Вы хотите соответствовать допустимым адресам IPv4 (один на строку), используйте следующую команду:
grep -E '^((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9]) asd.txt