Community

    • Login
    • Search
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search

    Can I sort IP addresses in numeric value

    Help wanted · · · – – – · · ·
    5
    7
    6228
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • Mark Brookman
      Mark Brookman last edited by

      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?

      1 Reply Last reply Reply Quote 0
      • guy038
        guy038 last edited by guy038

        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

        1 Reply Last reply Reply Quote 1
        • Gabriel Cunningham
          Gabriel Cunningham last edited by

          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.

          1 Reply Last reply Reply Quote 1
          • Mark Brookman
            Mark Brookman last edited by

            Hi,

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

            Many Thanks

            Mark

            1 Reply Last reply Reply Quote 0
            • Mark Brookman
              Mark Brookman last edited by

              Many Thanks this works great!!!

              1 Reply Last reply Reply Quote 0
              • Matthijs Wensveen
                Matthijs Wensveen last edited by

                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.

                Scott Sumner 1 Reply Last reply Reply Quote 0
                • Scott Sumner
                  Scott Sumner @Matthijs Wensveen last edited by

                  @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?

                  1 Reply Last reply Reply Quote 1
                  • First post
                    Last post
                  Copyright © 2014 NodeBB Forums | Contributors