• Login
Community
  • Login

Deleting multiple lines that contain a certain text

Scheduled Pinned Locked Moved Help wanted · · · – – – · · ·
6 Posts 2 Posters 1.5k Views
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.
  • C
    Crypto Lifer
    last edited by Sep 12, 2018, 8:51 PM

    Hi there, I want to delete for example, the whole 7 lines that contain the word Guest01 from <passthrumac> to </passthrumac>. I have thousands of these entries in a XML document. I want to remove all those entries with Guest01. From <passthrumac> to </passthrumac> with Guest01 inside of it. Is this possible? thank you so much!

    	<passthrumac>
    		<action>pass</action>
    		<mac>00:11:22:33:44:55</mac>
    		<ip>10.10.50.254</ip>
    		<username>Guest01</username>
    		<descr><![CDATA[Auto-added for user Guest01]]></descr>
    	</passthrumac>
    
    1 Reply Last reply Reply Quote 0
    • T
      Terry R
      last edited by Sep 12, 2018, 9:01 PM

      I think the following regex will find those instances where Guest01 exists in the group of lines.
      As I wasn’t sure if there were actually spaces at the start of the lines I have incorporated spaces of any length.

      Find what: (?s)^\h+?<passthrumac>.+?Guest01.+?</passthrumac>\R
      Replace with: empty field here <-- this means nothing in this field

      I hope this meets your needs.

      Terry

      1 Reply Last reply Reply Quote 1
      • C
        Crypto Lifer
        last edited by Crypto Lifer Sep 12, 2018, 9:14 PM Sep 12, 2018, 9:11 PM

        Thanks for the quick reply!

        I just tried your code but it highlights everything when I do find what:

        Do I check on Match case, Wrap around as well? Regular expression with checked Matches newline?

        Here’s an example of the text before and after. Thousands of other entries with different names of course.
        <passthrumac>
        <action>pass</action>
        <mac>44:55:66:77:88:99</mac>
        <ip>10.10.50.252</ip>
        <username>randomperson2</username>
        <descr><![CDATA[Auto-added for user randomperson2]]></descr>
        </passthrumac>
        <passthrumac>
        <action>pass</action>
        <mac>11:22:33:44:55:66</mac>
        <ip>10.10.50.254</ip>
        <username>Guest01</username>
        <descr><![CDATA[Auto-added for user Guest01]]></descr>
        </passthrumac>
        <passthrumac>
        <action>pass</action>
        <mac>66:55:44:33:22:11</mac>
        <ip>10.10.50.253</ip>
        <username>randomperson1</username>
        <descr><![CDATA[Auto-added for user randomperson1]]></descr>
        </passthrumac>

        I’ve had a friend make this for me, but it does not seem to work for me. It highlights the whole document.

        <passthrumac>((.|\n))guest01((.|\n))passthrumac>$

        1 Reply Last reply Reply Quote 0
        • T
          Terry R
          last edited by Terry R Sep 12, 2018, 9:17 PM Sep 12, 2018, 9:17 PM

          You don’t need to tick match case, unless the Guest01 may sometimes be guest01.

          I do see the problem though. In your NEW example you have Guest01 mentioned, but as "Auto-Added for user Guest01. That’s why my regex grabbed it as well. I assumed Guest01 would only exist once inside the group of lines if between the <username>/</username> tags.

          So the revised regex is
          Find what: (?s)^\h+?<passthrumac>.+?<username>Guest01</username>.+?</passthrumac>\R
          Same Replace what field.

          This is a regex which needs the search mode as “regular expression” and Wrap-around ticked. Match Case should not be unless as I mentioned above sometimes Guest01 is guest01.

          Have a try at this regex and come back with how it went this time.

          Terry

          1 Reply Last reply Reply Quote 0
          • T
            Terry R
            last edited by Sep 12, 2018, 9:28 PM

            Actually cancel my last post, I didn’t test it as I assumed adding the new string to search on would work. I’ve now tested and it does NOT. It grabs the next group of lines as well.

            Stand by, either I or someone else will provide a better regex. I was also wrong in my answer in regards the Match case. I had it back to front.

            Terry

            1 Reply Last reply Reply Quote 0
            • T
              Terry R
              last edited by Sep 12, 2018, 9:46 PM

              Right, this time I tested it and I think this regex might achieve the correct result. Sorry about the false start. My mind on other matters.

              Find what: ^<passthrumac(?:.+\R){4}.+?>Guest01<(?:.+\R){2}</passthrumac>\R
              Replace with: empty field here <— nothing in this field
              So search mode is “regular Expresssion” and “wrap-around” ticked, nothing else.

              You mentioned Match Case. You could tick it if you ONLY want exactly the text portions as typed in the Find what field, so <passthrumac>, rather than say <PassThruMAC>, and Guest01 rather than guest01. Otherwise I’d leave it unticked.

              Again, sorry, have a go with this and let me know.

              This regex expects EXACTLY 7 lines, hence I removed the (?s) from the first incorrect one. So the lines must be in the same order as you show. That’s why I only check for >Guest01< rather then look for <username>Guest01</username>. So it cannot confuse Guest01 on that line instead of the following Guest01 with the Auto-added string in front.

              Terry

              1 Reply Last reply Reply Quote 1
              1 out of 6
              • First post
                1/6
                Last post
              The Community of users of the Notepad++ text editor.
              Powered by NodeBB | Contributors