From f12fb1e4092900f26f7f8c71cde44b1cd7d26439 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Sun, 23 Jan 2022 19:04:27 +0100 Subject: sed: fix handling of escaped delimiters in s/// replacement function old new delta parse_regex_delim 111 140 +29 Signed-off-by: Denys Vlasenko --- editors/sed.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'editors') diff --git a/editors/sed.c b/editors/sed.c index 02a527b..32a4b61 100644 --- a/editors/sed.c +++ b/editors/sed.c @@ -355,7 +355,10 @@ static int parse_regex_delim(const char *cmdstr, char **match, char **replace) /* save the replacement string */ cmdstr_ptr += idx + 1; idx = index_of_next_unescaped_regexp_delim(- (int)delimiter, cmdstr_ptr); - *replace = copy_parsing_escapes(cmdstr_ptr, idx, 0); +//GNU sed 4.8: +// echo 789 | sed 's&8&\&&' - 7&9 ("\&" remained "\&") +// echo 789 | sed 's1\(8\)1\1\11' - 7119 ("\1\1" become "11") + *replace = copy_parsing_escapes(cmdstr_ptr, idx, delimiter != '&' ? delimiter : 0); return ((cmdstr_ptr - cmdstr) + idx); } -- cgit v1.1