How to extract IP address from the log's string with regular expression and Notepad++

I've such kind of strings from the log file

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

How can I match an IP address from every of that string and then replace the original one with matched IP using regular expression in Notepad++ text editor?

Expected result:

54.246.81.158
175.36.129.24

I prefer to achieve the goal usig regexp and Search and replace only. If it ever possible in Notepad++ I know that I can use macro functionality, but I don't want to do so.

So, at first, we'll match IP with regexp (\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}). At second we replace original string with IP from step #1 But I'm not sure if it ever possible using Notepad++. If I'm failed with this, I'll use vim :-)


Solution 1:

  • Ctrl+H
  • Find what: ^.+?((?:\d+\.){3}\d+).+$
  • Replace with: $1
  • check Wrap around
  • check Regular expression
  • DO NOT CHECK . matches newline
  • Replace all

Explanation:

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

Replacement:

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

Result for given example:

54.246.81.158
175.36.129.24

To be sure you have an IP address, use

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

instead of

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