Community
    • Login

    Search Just Within Provided Line Number

    Scheduled Pinned Locked Moved Help wanted · · · – – – · · ·
    14 Posts 6 Posters 482 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.
    • Scott DanielsS
      Scott Daniels
      last edited by

      I need to be search line number 4 for the number 2. I need to perform this search on a directory of text files. Is this possible?

      Terry RT CoisesC 2 Replies Last reply Reply Quote 1
      • Terry RT
        Terry R @Scott Daniels
        last edited by Terry R

        @Scott-Daniels said in Search Just Within Provided Line Number:

        Is this possible?

        Certainly is. To work you need to use the “Find in Files” function, have the search mode set to Regular Expression and the following red text in the Find What field:(?-s)^(.*\R){3}\K(.*2.*\R)

        You would then fill in the remaining fields as necessary to locate the folder containing the files and any other filtering necessary to only test the files you want within that folder (say you have TXT and BIN files), you would use *.TXT in the filters field.

        Click on the Find All, and the search panel will appear with the results of which files meet that criteria.

        Have a go, and if issues come back with more questions.

        Terry

        1 Reply Last reply Reply Quote 3
        • CoisesC
          Coises @Scott Daniels
          last edited by Coises

          @Scott-Daniels said in Search Just Within Provided Line Number:

          I need to be search line number 4 for the number 2. I need to perform this search on a directory of text files. Is this possible?

          Search | Find in Files… from the main menu; then enter:

          Find what: \A([^\r\n]*+\R){3}[^\r\n]*\K2
          Search Mode: Regular expression
          Filters: *.* or *.txt
          Directory: set as appropriate using … button

          and click Find All.

          Edit to add: Rereading, I see that you said “the number 2” and not “the digit 2.” If you meant that you specifically need to find 2 but not 20 or 12, then change the expression to:

          Find what: \A([^\r\n]*+\R){3}[^\r\n]*\K(?<!\d)2(?!\d)

          1 Reply Last reply Reply Quote 2
          • guy038G
            guy038
            last edited by guy038

            Hello, @scott-daniels, @terry-r, @coises and All,

            @scott-daniels, I realize that other people have already beaten me to it !!


            Here is how I understand your question :

            • For each text file in a specific folder :

              • Don(t care about the first three lines of each file

              • And looks for, at least, one occurrence of the string 2 in the fourth line of each file

            Am I right regarding this assumption ?


            In case of a positive answer, here is my solution, similar to their ones :

            • Open the Find in Files dialog ( Ctrl + Shift + F )

            • Untick all box options

            • Fill in the string (?-s)\A(.*\R){3}.*?\K2 in the Find what: zone

            • Leave the Replace with: zone Empty

            • Enter *.txt in the Filters : zone

            • Enter full pathname of your directory name in the Directory : zone

            • Select the Regular expression search mode

            • Click once on the Find All button

            • Wait till the Search results window is displayed !

            Best regards

            guy038

            Alan KilbornA 1 Reply Last reply Reply Quote 1
            • Alan KilbornA
              Alan Kilborn @guy038
              last edited by Alan Kilborn

              I think @Coises 's answer is best here:

              • Terry didn’t use \A to keep the search anchored to the start of file
              • Guy did too much (OP didn’t mention deleting the matching text, only finding it)
              • Coises gets bonus points for using the possessive form
              Terry RT 1 Reply Last reply Reply Quote 1
              • Terry RT
                Terry R @Alan Kilborn
                last edited by Terry R

                @Alan-Kilborn said in Search Just Within Provided Line Number:

                Terry didn’t use \A to keep the search anchored to the start of file

                Unless I’m mistaken, doesn’t each Find in Files search always start at the beginning, thus making the \A redundant. Of course keeping it in just means being consistent with regex making, but since it’s used very in-often we hardly ever see it in regexes even for opened documents.

                Terry

                Alan KilbornA 1 Reply Last reply Reply Quote 0
                • Alan KilbornA
                  Alan Kilborn @Terry R
                  last edited by Alan Kilborn

                  @Terry-R said in Search Just Within Provided Line Number:

                  doesn’t each Find in Files search always start at the beginning

                  Yes, but nothing prevents your regex from starting a match later in the file (if one/more happens to exist). The \A will do this.

                  Of course, since OP is apparently just visually inspecting results, he could ignore any matches that aren’t near the top-of-file.

                  Terry RT 1 Reply Last reply Reply Quote 0
                  • Terry RT
                    Terry R @Alan Kilborn
                    last edited by

                    @Alan-Kilborn said in Search Just Within Provided Line Number:

                    Yes, but nothing prevents your regex from starting a match later in the file (if one/more happens to exist).

                    Isn’t that a contradiction?

                    First you agree that each search in “Find in Files” commences at the start of a file. Then you suggest somehow a regex can “slip” to another possible occurrence. I don’t see how. Even if the search is repeated it will still find the same occurrence as the previous search.

                    Terry

                    PS maybe if there is some further debate we should start a new thread rather than cloud the OP’s judgement on other things.

                    PeterJonesP 1 Reply Last reply Reply Quote 0
                    • PeterJonesP
                      PeterJones @Terry R
                      last edited by PeterJones

                      @Terry-R ,

                      As with all regex, if it doesn’t match at the start of the search, it keeps going to the end, checking if each position matches. Your regex will match the file below, even though the fourth line doesn’t have a 2 in it anywhere – lines 2-5 fit the pattern you defined.

                      one
                      two
                      three
                      four
                      five has 2
                      six
                      

                      @Alan-Kilborn ,

                      I am not sure @Coises is right, either, because his assumes the fourth line starts with a 2, whereas the phrasing of the OP implies it might be anywhere on line 4. (And @guy038 replicated that understanding.)

                      (?-s)\A(.*\R){3}\K(.*2.*) is my suggestion – I also removed the trailing \R, otherwise a 4-line file missing final newline wouldn’t be found.

                      Alan KilbornA Terry RT 2 Replies Last reply Reply Quote 0
                      • Alan KilbornA
                        Alan Kilborn @PeterJones
                        last edited by Alan Kilborn

                        @PeterJones said in Search Just Within Provided Line Number:

                        I am not sure @Coises is right, either, because his assumes the fourth line starts with a 2

                        Coises uses [^\r\n]*\K2 which would start trying to match at the beginning of line 4 (from the earlier stuff in his regex). It appears to read (starting there) as "match any non-line-ending chars zero-or-more times followed by a 2 – seems to fit the bill. I’m away from my PC right now, so I can’t try it, though.

                        PeterJonesP 1 Reply Last reply Reply Quote 1
                        • PeterJonesP
                          PeterJones @Alan Kilborn
                          last edited by

                          @Alan-Kilborn ,

                          Oh, you’re right… I missed the [^\r\n]* when I was reading it (and didn’t try his before my post).

                          So yes, I just confirmed @Coises’ suggestion works on my test data, too.

                          1 Reply Last reply Reply Quote 0
                          • Terry RT
                            Terry R @PeterJones
                            last edited by Terry R

                            @PeterJones said in Search Just Within Provided Line Number:

                            Your regex will match the file below, even though the fourth line doesn’t have a 2 in it anywhere – lines 2-5 fit the pattern you defined.

                            Thanks, I now stand corrected. Somehow with my meagre testing on a small file I neglected to include another occurrence further down the file. Of course that shouldn’t have affected my decision as I knew the regex completes as many iterations as necessary to include the “whole file”, but there was a snafu in my solution. Yes using the \A is necessary to JUST look at the nth line ONLY.

                            Thanks
                            Terry

                            PS @Alan-Kilborn I DID read your info, but somehow that didn’t allow me to make the connection and Peter’s example is what it took to get me over the line. I guess today just isn’t my day, there’s always tomorrow!

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

                              Hello, @scott-daniels, @terry-r, @coises @alan-kilborn, @peterjones and All,

                              @alan-kilborn, you said :

                              • Guy did too much (OP didn’t mention deleting the matching text, only finding it)

                              I don’t understand because, in my post, I do NOT speak about deleting the 2 digit, at any moment ?


                              Now, about the @coises syntax \A([^\r\n]*+\R){3}[^\r\n]*\K2, with an atomic ( possessive ) syntax, I don’t see the bonus to use it !

                              Indeed, it necessarily needs to get some EOL chars after the possible standard chars [\r\n]*. Thus, it will grasp all standard chars, even zero, followed with EOL char(s), in all cases !

                              And note that I use the (?-s) modifier which means that the . regex char is identical to [^\r\n\f], anyway !


                              But, I must admit that the second @coises’s solution is more accurate, if the OP needs to get the number 2, only

                              Thus, we end up, with this search regex :

                              (?-s)\A(?:.*\R){3}.*?\K(?<!\d)2(?!\d)

                              Best Regards,

                              guy038

                              Alan KilbornA 1 Reply Last reply Reply Quote 1
                              • Alan KilbornA
                                Alan Kilborn @guy038
                                last edited by

                                @guy038 said in Search Just Within Provided Line Number:

                                I don’t understand because, in my post, I do NOT speak about deleting the 2 digit, at any moment ?

                                Ah…you’re right. I supposed I was confused because when you said:

                                Leave the Replace with: zone Empty

                                It appeared to me like this was setting up a replace-with-nothing aka delete operation!

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