Извлечение IP-адресов из текстового файла с помощью пакета

У меня есть текстовый файл с такими данными:

21 августа [10.23.5.5] Динамика разрушения

18 августа [10.150.1.45] 21 августа 15:28:34 otoldc

24 августа [10.96.5.10] 21 августа 2012 18:58:26 HYD

24 августа [10.96.5.10] 22 августа 2012 18:58:26 HYD

21 августа [192.168.15.231] sendmail[18831]

Мне нужно удалить все, кроме IP-адресов, окруженных "[" и "]". Длина строки до "[" исправлена. Длина строки после "]" изменялась. Я попытался использовать одно из существующих решений здесь, но не смог добиться успеха. Можно ли сделать это с помощью пакета? Спасибо:-)

3 ответа

Прямо из командной строки: for /f "tokens=2 delims=[]" %F in (file.txt) do echo %F, Перенаправить, как вы хотите. Не такой гибкий, как sed/awk & regexes, но не требует внешних инструментов.

Однако, если вы планируете собрать что-то более сложное, я бы действительно обратился к более мощным инструментам - помимо уже упомянутого awk или Perl естественным выбором для Win был бы Powershell.

Установить версию sed если это еще не в вашей системе.

$ sed -r -e 's/^[^[]*\[([^]\]*)].*/\1/' file.txt
10.23.5.5
10.150.1.45
10.96.5.10
10.96.5.10
192.168.15.231

Этот "однострочный" скрипт "sed" выводит каждую строку ввода после удаления из строк всего, кроме содержимого в первом наборе квадратных скобок [] в строке - он не проверяет это содержимое, чтобы убедиться, что оно соответствует IP-адресу.

Вы пометили это как пакет, поэтому я предполагаю, что это на Windows, а не Linux. Тем не менее, я настоятельно рекомендую вам зайти на сайт Cygwin и скачать его копию. Это даст вам доступ к cat а также grep команды, которые делают это намного проще. После установки Cygwin вы можете выполнить следующую команду, чтобы проанализировать IP-адреса из вашего файла журнала.

cat your.log | grep -oE '([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}' > ips.txt

ура

Другие вопросы по тегам