Jak wyodrębnić adres IP z ciągu dziennika za pomocą wyrażenia regularnego i Notepad ++

1

Mam takie ciągi znaków z pliku dziennika

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

W jaki sposób mogę dopasować adres IP z każdego z tych łańcuchów, a następnie zastąpić oryginalny z dopasowanym IP, używając wyrażenia regularnego w edytorze tekstu Notepad ++?

Spodziewany wynik :

54.246.81.158
175.36.129.24

Wolę osiągnąć cel używając regex i Wyszukaj i zastąp tylko. Jeśli to możliwe, w Notepad ++ Wiem, że mogę korzystać z funkcji makr, ale nie chcę tego robić.

Na początku dopasujemy adres IP do wyrażenia regularnego ( \d{1,3}.\d{1,3}.\d{1,3}.\d{1,3} ). W drugim zastępujemy oryginalny ciąg IP z kroku # 1 Ale nie jestem pewien, czy jest to możliwe za pomocą Notepad ++. Jeśli mi się to nie uda, użyję vim :-)

Twissell
źródło
Jeśli tekst rule family="ipv4" source address=" jest wspólny we wszystkich liniach, możesz także zastąpić swój adres IP, nagrywając macro dla jednego wiersza i wykonanie go do końca pliku.
Sandeep
Nie jest jasne, co próbujesz osiągnąć, edytuj swoje pytanie i dodaj więcej wierszy oraz oczekiwany wynik.
Toto
@Toto, dodano przykład, gotowe.
Twissell

Odpowiedzi:

0
  • Ctrl + H
  • Znajdź co: ^.+?((?:\d+\.){3}\d+).+$
  • Zamienić: $1
  • sprawdź Wrap around
  • zaznacz Wyrażenie regularne
  • NIE SPRAWDŹ . matches newline
  • Zamień wszystko

Wyjaśnienie:

^           : 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

Zastąpienie:

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

Wynik dla danego przykładu:

54.246.81.158
175.36.129.24

Aby mieć pewność, że masz adres IP, użyj

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

zamiast

((?:\d+\.){3}\d+)
Toto
źródło
To jest to czego chce. Dzięki! Użyłem bardzo podobnego do twojego wyrażenia regularnego, ale mój błąd został sprawdzony dopasowany znak nowej linii pudełko
Twissell
0

Prostsze rozwiązanie, ale nie używające RegEx:

Zastąpić

rule family="ipv4" source address="

z niczym i

" reject

z niczym.

pbies
źródło
Dzięki za odpowiedź. Ale to jest Podstęp ale nie prawda , MOIM ZDANIEM
Twissell