Извлечение IP-адресов в каждой строке файла в оболочке

у меня есть этот входной файл в Ubuntu:

146.14.142.96.17747 197.102.40.184.13748:
146.14.142.96.17747 197.102.40.184.13749: 
146.14.142.96.17747 197.102.40.184.13750:
146.114.142.96.17747 197.102.40.184.13751:
46.14.142.96.17747 197.102.40.184.13752:

и я хотел бы иметь такой вывод, используя сценарии оболочки:

отделить два IP-адреса без номера порта
Я имею ввиду delete ports

146.14.142.96 197.102.40.184
146.14.142.96 197.102.40.184 
146.14.142.96 197.102.40.184
146.114.142.96 197.102.40.184
46.14.142.96 197.102.40.184
5
задан Arash
источник

2 ответов

для строк, отформатированных точно так, как показано в вопросе, это будет делать:

sed -E 's/\.[0-9]+[ :]/ /g' input-file

как работает:

  • -E переключатель позволяет Расширенные Регулярные Выражения.

  • s/SEARCH/REPLACE/g глобально (/g) заменяет (s/)поиск С заменить.

  • \.[0-9]+[ :] соответствует точке после любого положительного числа цифр после пробела или колон.

однако, это сломает если форматирование меняет даже немножко. Такой подход может привести robuster:

sed -E 's/(([0-9]+\.){3}[0-9]+)[^ ]+//g' input-file

как работает:

  • ([0-9]+\.){3}[0-9]+ соответствует IP (три группы цифр, за которыми следуют точки плюс дополнительная группа цифр).

  • окружающая скобках объявить предыдущий матч в качестве первого частичное совпадение ().

  • [^ ]+ соответствует любому непространственный символ, следующий за IP.

3
отвечен Dennis 2013-04-25 17:28:09
источник

выполните поиск и замену с помощью regex

(\d+\.\d+\.\d+\.\d+)\.\d+(:?)

и заменить текст


различные инструменты поддерживают поиск и замену регулярных выражений, хотя диалект может немного отличаться. Выше работает с Notepad++.

или в vim вы можете сделать

:s/\(\d\+\.\d\+\.\d\+\.\d\+\)\.\d\+\(:\?\)//g
0
отвечен jizugu 2013-04-25 17:12:47
источник

Другие вопросы awk linux shell