1

У меня есть такие строки из файла журнала

rule family="ipv4" source address="54.246.81.158" reject
rule family="ipv4" source address="175.36.129.24" reject

Как мне сопоставить IP-адрес каждой из этих строк, а затем заменить исходный IP-адресом с помощью регулярного выражения в текстовом редакторе Notepad++?

Ожидаемый результат:

54.246.81.158
175.36.129.24

Я предпочитаю достигать цели с помощью регулярных выражений и поиска и замены . Если это когда-либо возможно в Notepad++, я знаю, что могу использовать функциональность макросов, но я не хочу этого делать.

Итак, сначала мы сопоставим IP с регулярным выражением (\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}). Во-вторых, мы заменяем исходную строку на IP с шага № 1, но я не уверен, возможно ли это когда-либо с использованием Notepad++. Если мне не удастся с этим, я буду использовать vim :-)

2 ответа2

1
  • Ctrl+H
  • Найти что: ^.+?((?:\d+\.){3}\d+).+$
  • Заменить на: $1
  • проверить обернуть
  • проверьте регулярное выражение
  • НЕ ПРОВЕРИТЬ . matches newline
  • Заменить все

Объяснение:

^           : beginning of line
.+?         : 1 or more any character but newline
(           : start group 1
  (?:       : start non capture group
    \d+     : 1 or more digit
    \.      : a dot
  ){3}      : end group, must appear 3 times
  \d+       : 1 or more digit
)           : end group 1
.+          : 1 or more any character but newline
$           : end of line

Замена:

$1          : content of group 1 (ie. the IP)

Результат для данного примера:

54.246.81.158
175.36.129.24

Чтобы убедиться, что у вас есть IP-адрес, используйте

((?: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]?)))

вместо

((?:\d+\.){3}\d+)
0

Более простое решение, но без использования RegEx:

замещать

rule family="ipv4" source address="

ни с чем, и

" reject

ни с чем.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .