Now, what was that logic block doing up there?
diff --git a/editors/sed.c b/editors/sed.c
index eaca9ad..bc0e961 100644
--- a/editors/sed.c
+++ b/editors/sed.c
@@ -537,12 +537,6 @@
 	int altered = 0;
 	regmatch_t *regmatch = NULL;
 
-	/* if the user specified that they didn't want anything printed (i.e. a -n
-	 * flag and no 'p' flag after the s///), then there's really no point doing
-	 * anything here. */
-	if (be_quiet && !sed_cmd->sub_p)
-		return 0;
-
 	/* we only proceed if the substitution 'search' expression matches */
 	if (regexec(sed_cmd->sub_match, line, 0, NULL, 0) == REG_NOMATCH)
 		return 0;
@@ -615,6 +609,12 @@
 			 *    flag exists in the first place.
 			 */
 
+			/* if the user specified that they didn't want anything printed (i.e. a -n
+			 * flag and no 'p' flag after the s///), then there's really no point doing
+			 * anything here. */
+			if (be_quiet && !sed_cmd->sub_p)
+				break;
+
 			/* we print the line once, unless we were told to be quiet */
 			if (!be_quiet)
 				altered = do_subst_command(sed_cmd, line);
diff --git a/sed.c b/sed.c
index eaca9ad..bc0e961 100644
--- a/sed.c
+++ b/sed.c
@@ -537,12 +537,6 @@
 	int altered = 0;
 	regmatch_t *regmatch = NULL;
 
-	/* if the user specified that they didn't want anything printed (i.e. a -n
-	 * flag and no 'p' flag after the s///), then there's really no point doing
-	 * anything here. */
-	if (be_quiet && !sed_cmd->sub_p)
-		return 0;
-
 	/* we only proceed if the substitution 'search' expression matches */
 	if (regexec(sed_cmd->sub_match, line, 0, NULL, 0) == REG_NOMATCH)
 		return 0;
@@ -615,6 +609,12 @@
 			 *    flag exists in the first place.
 			 */
 
+			/* if the user specified that they didn't want anything printed (i.e. a -n
+			 * flag and no 'p' flag after the s///), then there's really no point doing
+			 * anything here. */
+			if (be_quiet && !sed_cmd->sub_p)
+				break;
+
 			/* we print the line once, unless we were told to be quiet */
 			if (!be_quiet)
 				altered = do_subst_command(sed_cmd, line);