The previous fix for 's/a/1/;s/b/2/;t one;p;:one;p' broke the case of
authorGlenn L McGrath <bug1@ihug.co.nz>
Sun, 14 Sep 2003 08:52:53 +0000 (08:52 -0000)
committerGlenn L McGrath <bug1@ihug.co.nz>
Sun, 14 Sep 2003 08:52:53 +0000 (08:52 -0000)
echo fooba | ./busybox sed -n 's/foo//;s/bar/found/p'

I really need to start adding these tests to the testsuite.

keep the substituted and altered flags seperate

editors/sed.c

index 2be4ed1..63d5581 100644 (file)
@@ -915,8 +915,7 @@ static void process_file(FILE * file)
                                                }
                                        }
 #endif
-                                       altered = substituted;
-                                       if (!be_quiet && altered && ((sed_cmd->next == NULL)
+                                       if (!be_quiet && substituted && ((sed_cmd->next == NULL)
                                                        || (sed_cmd->next->cmd != 's'))) {
                                                force_print = 1;
                                        }
@@ -1105,7 +1104,7 @@ static void process_file(FILE * file)
                /* we will print the line unless we were told to be quiet or if the
                 * line was altered (via a 'd'elete or 's'ubstitution), in which case
                 * the altered line was already printed */
-               if ((!be_quiet && !altered) || force_print) {
+               if ((!be_quiet && !altered && !substituted) || force_print) {
                        puts(pattern_space);
                }
                free(pattern_space);