/(.+)n1/ works but /(.*)n1/ doesn't when they should both work

The name of the pictureThe name of the pictureThe name of the pictureClash Royale CLAN TAG#URR8PPP











up vote
0
down vote

favorite












I was playing around with sed after answering another question and I noticed that .+ and .* are not giving the same result when they both match multiple characters in a context address.

The following command1:



sed -E '$!N;/(.+)n1/!P;D' <<IN
one
one_more
two
two_more
IN


prints



one_more
two_more


OK, that's the expected output.

Changing the regex from .+ to .* (i.e. from one or more characters to zero or more characters) should give the same result but it does not:



sed -E '$!N;/(.*)n1/!P;D' <<IN
one
one_more
two
two_more
IN


prints just one line



two_more


It appears to work fine in the left hand side of a substitution e.g.



sed -E '$!N;s/(.*)n1/1/' <<IN
one
one_more
two
two_more
IN


prints



one_more
two_more


just not in a context address...

What's going on here ?




1: I'm using ERE for simplicity/readability, the same happens when using BRE










share|improve this question

























    up vote
    0
    down vote

    favorite












    I was playing around with sed after answering another question and I noticed that .+ and .* are not giving the same result when they both match multiple characters in a context address.

    The following command1:



    sed -E '$!N;/(.+)n1/!P;D' <<IN
    one
    one_more
    two
    two_more
    IN


    prints



    one_more
    two_more


    OK, that's the expected output.

    Changing the regex from .+ to .* (i.e. from one or more characters to zero or more characters) should give the same result but it does not:



    sed -E '$!N;/(.*)n1/!P;D' <<IN
    one
    one_more
    two
    two_more
    IN


    prints just one line



    two_more


    It appears to work fine in the left hand side of a substitution e.g.



    sed -E '$!N;s/(.*)n1/1/' <<IN
    one
    one_more
    two
    two_more
    IN


    prints



    one_more
    two_more


    just not in a context address...

    What's going on here ?




    1: I'm using ERE for simplicity/readability, the same happens when using BRE










    share|improve this question























      up vote
      0
      down vote

      favorite









      up vote
      0
      down vote

      favorite











      I was playing around with sed after answering another question and I noticed that .+ and .* are not giving the same result when they both match multiple characters in a context address.

      The following command1:



      sed -E '$!N;/(.+)n1/!P;D' <<IN
      one
      one_more
      two
      two_more
      IN


      prints



      one_more
      two_more


      OK, that's the expected output.

      Changing the regex from .+ to .* (i.e. from one or more characters to zero or more characters) should give the same result but it does not:



      sed -E '$!N;/(.*)n1/!P;D' <<IN
      one
      one_more
      two
      two_more
      IN


      prints just one line



      two_more


      It appears to work fine in the left hand side of a substitution e.g.



      sed -E '$!N;s/(.*)n1/1/' <<IN
      one
      one_more
      two
      two_more
      IN


      prints



      one_more
      two_more


      just not in a context address...

      What's going on here ?




      1: I'm using ERE for simplicity/readability, the same happens when using BRE










      share|improve this question













      I was playing around with sed after answering another question and I noticed that .+ and .* are not giving the same result when they both match multiple characters in a context address.

      The following command1:



      sed -E '$!N;/(.+)n1/!P;D' <<IN
      one
      one_more
      two
      two_more
      IN


      prints



      one_more
      two_more


      OK, that's the expected output.

      Changing the regex from .+ to .* (i.e. from one or more characters to zero or more characters) should give the same result but it does not:



      sed -E '$!N;/(.*)n1/!P;D' <<IN
      one
      one_more
      two
      two_more
      IN


      prints just one line



      two_more


      It appears to work fine in the left hand side of a substitution e.g.



      sed -E '$!N;s/(.*)n1/1/' <<IN
      one
      one_more
      two
      two_more
      IN


      prints



      one_more
      two_more


      just not in a context address...

      What's going on here ?




      1: I'm using ERE for simplicity/readability, the same happens when using BRE







      sed regular-expression






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked 41 mins ago









      don_crissti

      48.1k15127157




      48.1k15127157

























          active

          oldest

          votes











          Your Answer







          StackExchange.ready(function()
          var channelOptions =
          tags: "".split(" "),
          id: "106"
          ;
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function()
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled)
          StackExchange.using("snippets", function()
          createEditor();
          );

          else
          createEditor();

          );

          function createEditor()
          StackExchange.prepareEditor(
          heartbeatType: 'answer',
          convertImagesToLinks: false,
          noModals: false,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: null,
          bindNavPrevention: true,
          postfix: "",
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          );



          );













           

          draft saved


          draft discarded


















          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f477595%2fn-1-works-but-n-1-doesnt-when-they-should-both-work%23new-answer', 'question_page');

          );

          Post as a guest



































          active

          oldest

          votes













          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes















           

          draft saved


          draft discarded















































           


          draft saved


          draft discarded














          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f477595%2fn-1-works-but-n-1-doesnt-when-they-should-both-work%23new-answer', 'question_page');

          );

          Post as a guest













































































          Popular posts from this blog

          How to check contact read email or not when send email to Individual?

          Displaying single band from multi-band raster using QGIS

          How many registers does an x86_64 CPU actually have?