From e6238dda31b4a82e3806c51f809c3d1c657bfcdc Mon Sep 17 00:00:00 2001 From: Robert Ransom Date: Tue, 22 May 2012 00:05:03 +0000 Subject: [PATCH] grep: Remove trailing newline before trying to match RE This unbreaks the "$" operator and some uses of grep with other REs (e.g. 'grep . TODO' to remove empty lines). --- grep.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/grep.c b/grep.c index f244603..ece4034 100644 --- a/grep.c +++ b/grep.c @@ -3,6 +3,7 @@ #include #include #include +#include #include #include "text.h" #include "util.h" @@ -70,9 +71,11 @@ grep(FILE *fp, const char *str, regex_t *preg) { char *buf = NULL; long n, c = 0; - size_t size = 0; + size_t size = 0, len; for(n = 1; afgets(&buf, &size, fp); n++) { + if(buf[(len = strlen(buf))-1] == '\n') + buf[--len] = '\0'; if(regexec(preg, buf, 0, NULL, 0) ^ vflag) continue; switch(mode) { @@ -89,7 +92,7 @@ grep(FILE *fp, const char *str, regex_t *preg) printf("%s:", str); if(mode == 'n') printf("%ld:", n); - fputs(buf, stdout); + printf("%s\n", buf); break; } match = true;