Can I sort IP addresses in numeric value



  • Hello,

    I have a problem, I need to find a way to sort ip addresses in the following format:

    192.168.1.1
    192.168.1.2
    192.168.2.12
    192.168.2.34
    192.168.3.4

    This is just a small example I am moving the data into notepad ++ in a jumbled format i.e

    192.168.2.3
    172.10.10.3
    192.168.1.56

    Has anyone come across this problem and can help please?



  • Hi, @mark-brookman,

    Not very difficult, indeed ! We just have to re-write each IPV4 address, in such a way that it only needs a classical sort ;-)

    So, starting, for instance, with that list of IPV4 addresses, below :

    192.168.5.13
    192.168.5.9
    192.168.5.205
    192.205.54.3
    92.168.5.3
    9.168.5.3
    192.168.210.3
    192.168.17.107
    192.168.17.3
    192.20.2.3
    192.205.7.3
    12.120.255.0
    192.168.210.127
    192.168.210.29
    1.1.12.127
    0.0.0.0
    255.255.255.255
    

    Now :

    • Move back to the beginning of your list

    • Open the Replace dialog

    • Enter (?:^|(?<=\.))\d(\d)?(?=\.|$), in the Find what: zone

    • Enter \x20(?1:\x20)$0, in the Replace with: zone

    • Select the Regular expression search mode

    • Click on the Replace All button

    You should obtain the modified list, below :

    192.168.  5. 13
    192.168.  5.  9
    192.168.  5.205
    192.205. 54.  3
     92.168.  5.  3
      9.168.  5.  3
    192.168.210.  3
    192.168. 17.107
    192.168. 17.  3
    192. 20.  2.  3
    192.205.  7.  3
     12.120.255.  0
    192.168.210.127
    192.168.210. 29
      1.  1. 12.127
      0.  0.  0.  0
    255.255.255.255
    

    Notes :

    • This S/R adds :

      • Two space characters to any individual one-digit number of an IPV4 address

      • One space character to any individual two-digits number of an IPV4 address

    • The string searched is the part \d(\d)? of the search regex, that is to say an individual one or two digits number. Note that in case of a one-digit number, the optional group (\d) does not exist

    • An overall match will occur, ONLY IF it is, both :

      • Preceded by a beginning of line or a dot symbol ( (?:^|(?<=\.)) ) Note the non-capturing group (?:......)

      • Followed by a dot symbol or an end of line, ( (?=\.|$) )

    • In replacement , we rewrite :

    • A first space character ( \x20 )

    • A second space character, only if group 1 does not exist ( (?1:\x20) , with the ELSE part, after the colon \x20 )

    • Finally, the entire searched string ( $0 ), which is a one or two digit(s) individual number


    Now, sort this list with the option Edit > Line Operations > Sort lines Lexicographically Ascending. You obtain :

      0.  0.  0.  0
      1.  1. 12.127
      9.168.  5.  3
     12.120.255.  0
     92.168.  5.  3
    192. 20.  2.  3
    192.168.  5.  9
    192.168.  5. 13
    192.168.  5.205
    192.168. 17.  3
    192.168. 17.107
    192.168.210.  3
    192.168.210. 29
    192.168.210.127
    192.205.  7.  3
    192.205. 54.  3
    255.255.255.255
    

    Finally, just get rid of all space characters, with the simple regex S/R, below :

    SEARCH \x20

    REPLACE Leave EMPTY

    Et voilà !

    Here is your list of IPV4 adresses, sorted in a numeric way :-))

    0.0.0.0
    1.1.12.127
    9.168.5.3
    12.120.255.0
    92.168.5.3
    192.20.2.3
    192.168.5.9
    192.168.5.13
    192.168.5.205
    192.168.17.3
    192.168.17.107
    192.168.210.3
    192.168.210.29
    192.168.210.127
    192.205.7.3
    192.205.54.3
    255.255.255.255
    

    Best Regards,

    guy038



  • Great post and detailed explanation.

    The following is a solution to a scenario when migrating DHCP reserved MAC addresses. When exporting via command line on server, the subsection regarding reserved IP is not sorted. In efforts to clean-up this list prior to migration, sorting is a great solution.

    Exporting DHCP data from Windows Server via command line as explained here:
    https://support.microsoft.com/en-us/help/325473/how-to-move-a-dhcp-database-from-a-computer-that-is-running-windows-nt

    Export:

    netsh dhcp server dump > C:\dhcp.txt
    

    Import:

    netsh exec c:\dhcp.txt
    

    Within the section “Add ReservedIp to the Scope” each line is dumped like (MacAddress is actual):

    Dhcp Server \\domain.name.local Scope 192.168.10.0 Add reservedip 192.168.10.125 MacAddress "DeviceName" "DeviceName" "BOTH"
    

    Leveraging details from a similar post (below) I was able to adapt a version for my specific needs:
    https://notepad-plus-plus.org/community/topic/11105/feature-request-sort-by-ip-address-cidr-notation

    Enter (?:^|(?<=\.))\d(\d)?(?=\.|$|\s), in the Find what: zone
    Enter \x23(?1:\x23)$0, in the Replace with: zone

    Note: The addition of the pipe, forward-slash, s (match trailing space)
    (I chose ASCII hex 23 (dec 35) number sign as a temporary char place holder not shown in the DHCP server naming. Experiment to see which char works for your needs.)
    http://www.ascii.cl/htmlcodes.htm

    The end result is proper spacing (padded with “hashes”).

    Then sort via “Sort Lines Lexicographically Ascending”
    https://superuser.com/questions/762279/sorting-lines-in-notepad-without-the-textfx-plugin#762281

    Now “unpad” the IP address for later import:
    SEARCH \x23
    REPLACE Leave EMPTY

    Hope this helps.



  • Hi,

    Thankyou for the post, I have a task for this soon and will give you an update.

    Many Thanks

    Mark



  • Many Thanks this works great!!!



  • Works great. Tiny addition: make sure you have the correct EOL. I replaced the comma’s in a comma-separated list of IP addresses with ‘\n’ in a CRLF (Windows) document. Sorting as described above produced unpredictable (to me) results.



  • @Matthijs-Wensveen said:

    I replaced the comma’s in a comma-separated list of IP addresses with ‘\n’ in a CRLF (Windows) document

    For the benefit of any future readers, what you should have done is a regular-expression replacement with \r\n for a Windows document.

    Sorting as described above produced unpredictable (to me) results.

    What does this mean? You also said “Works great”–so which is it?


Log in to reply