From 4157a8a71e2db9968690f430a5775f0790e88297 Mon Sep 17 00:00:00 2001 From: Glenn L McGrath Date: Mon, 10 Mar 2003 04:12:35 +0000 Subject: [PATCH] fix n, add N, P --- editors/sed.c | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/editors/sed.c b/editors/sed.c index 5b08c8ee1..e1242671e 100644 --- a/editors/sed.c +++ b/editors/sed.c @@ -382,7 +382,7 @@ static char *parse_cmd_str(sed_cmd_t * const sed_cmd, char *cmdstr) { /* if it was a single-letter command that takes no arguments (such as 'p' * or 'd') all we need to do is increment the index past that command */ - if (strchr("npqd=", sed_cmd->cmd)) { + if (strchr("nNpPqd=", sed_cmd->cmd)) { cmdstr++; } /* handle (s)ubstitution command */ @@ -680,6 +680,7 @@ static void process_file(FILE *file) if (line == NULL) { return; } + chomp(line); /* go through every line in the file */ do { @@ -688,7 +689,7 @@ static void process_file(FILE *file) /* Read one line in advance so we can act on the last line, the '$' address */ next_line = get_line_from_file(file); - chomp(line); + chomp(next_line); linenum++; altered = 0; @@ -722,10 +723,15 @@ static void process_file(FILE *file) case '=': printf("%d\n", linenum); break; - case 'p': + case 'P': { /* Write the current pattern space upto the first newline */ + char *tmp = strchr(line, '\n'); + if (tmp) { + *tmp = '\0'; + } + } + case 'p': /* Write the current pattern space to output */ puts(line); break; - case 'd': altered++; deleted = 1; @@ -808,8 +814,19 @@ static void process_file(FILE *file) free(line); return; case 'n': /* Read next line from input */ - i = ncmds; + free(line); + line = next_line; + next_line = get_line_from_file(file); + chomp(next_line); + linenum++; break; + case 'N': /* Append the next line to the current line */ + line = realloc(line, strlen(line) + strlen(next_line) + 2); + strcat(line, "\n"); + strcat(line, next_line); + next_line = get_line_from_file(file); + chomp(next_line); + linenum++; } }