Извлечение 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
ура