У меня есть скрипт, который генерирует какой-то вывод. Я хочу проверить этот вывод для любого IP-адреса, как
159.143.23.12
134.12.178.131
124.143.12.132
if (IPs are found in <file>)
then // bunch of actions //
else // bunch of actions //
Это fgrep
хорошая идея?
У меня есть Bash доступны.
shell-script
grep
ip
Кошур
источник
источник
0010.0000.0000.0001
? Может ли файл содержать вещи, которые выглядят как IP-адреса, такие как номера версий (soft-1.2.1100.1.tar.gz
сетевые спецификации (10.0.0.0/24), 1.2.3.4.5)? Вы бы согласились с положительным решением 333.444.555.666? Или0377.0377.0377.0377
(действительный четырехзначный IP-адрес)?bash
доступно, тоawk
обычно также, так что это может сработать для вас:awk '/([0-9]{2,3}\.){3}/ {print $5 "\t" $1}'
(Этот однострочный переводит/etc/hosts
формат списка XFR хоста в формат.)Ответы:
Да, у вас есть много вариантов / инструментов для использования. Я только что попробовал, это работает:
ifconfig | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b"
так что вы можете использовать
grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b"
для извлечения IP-адресов из вашего вывода.источник
"\b([0-9]{1,3}\.){3}[0-9]{1,3}\/[0-9][0-9]?"
чтобы найти CIDR (если они действительны)начиная мой ответ на основе этого ответа:
и преобразование ответа в полный IPv6 и т. д.:
если вы хотите сохранить / nnn, если он там есть:
а также есть сокращенная версия IPv6, которая включает в себя '::'.
Дополнительные ответы по IPv6 вы можете посмотреть здесь: /programming/53497/regular-expression-that-matches-valid-ipv6-addresses
источник
fgrep
старое имя для варианта,grep
который игнорирует сопоставление с образцом. Я бы порекомендовал вам использоватьgrep
(или дажеegrep
) вместо этого, особенно если вы явно хотите сопоставить шаблон.Если ваш файл называется, например,
ips
вы можете написать что-то вроде:Затем вы можете передать параметры, следуя сценарию
источник
Надеюсь, что он протестирован в SmartOS (вариант Solaris) и должен работать в других * nix средах:
Пример:
Эта модель соответствует только действительный IPv4, то есть
x.x.x.x
где вx
диапазоне от 0-255. Если вам нужно извлечь только соответствующий IP-адрес, добавьте-o
опцию в приведенную выше команду. Вы можете встроить эту команду в сценарий bash и, вероятно, в другие сценарии оболочки. И, еслиegrep
не получится,try grep -E ...
Используя его в (bash) сценарии оболочки:
ip=$(egrep -o '(([0-9]|[0-9]{2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[0-9]{2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])' file.txt) echo $ip
источник
Если у вас есть список IP-адресов в файле, по одному на строку,
grep
уже есть удобная-f
опция:Это может привести к нескольким ложным срабатываниям из-за строк, за которыми может следовать другой номер, чтобы сделать его другим IP. Вы можете с этим многое сделать, в зависимости от вашего случая, вы можете или не можете волноваться.
источник
Я думаю, что мой ответ на другой пост лучше подходит здесь. Благодаря этому посту и другим подобным, я придумал этот, который ищет правильный IP-формат, а затем избавляется от всех строк, содержащих 256 или выше. Замените IP на что-то недопустимое, чтобы вместо него ничего не выводилось:
Первый grep, вероятно, был найден в этом посте, и он проверяет любые числа от 0 до 999 в формате XXXX
Второй grep удаляет строки с номерами 256-999, оставляя только действительные IP-адреса формата, поэтому я подумал
НО ... Как указал G-Man, я ошибся, предположив, что IP будет на отдельной линии. Тем не менее, всегда есть место или другой разделитель для поиска по обе стороны от IP. Пробелы / разделители могут быть удалены с помощью sed или другими средствами после определения IP. Я также добавил -o к первому grep:
Первое и второе не дадут никакого вывода, а третье - и пробелы будут удалены.
источник
grep
выбрасывает эту строку из-за «500». (В вопросе никогда не говорилось, что IP-адрес (а) в файле, если таковой имеется, сам по себе будет в строке.) С другой стороны, он примет 1234.1.1.1 и 1.1.1.1234. Но, кроме этого, неплохо.Перенаправить этот вывод на некоторые
outputFile
Просто
grep
оно с рисунком как,источник
.
это оператор регулярного выражения, и его нужно экранировать, чтобы его можно было трактовать буквальноисточник