aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--editors/sed.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/editors/sed.c b/editors/sed.c
index 45574e81d..3d6871621 100644
--- a/editors/sed.c
+++ b/editors/sed.c
@@ -112,7 +112,7 @@ typedef struct sed_cmd_s {
/* globals */
/* options */
-static int be_quiet = 0, in_place=0;
+static int be_quiet = 0, in_place=0, regex_type=0;
FILE *nonstdout;
char *outname;
@@ -298,7 +298,7 @@ static int get_address(char *my_str, int *linenum, regex_t ** regex)
temp=copy_parsing_slashn(pos,next);
*regex = (regex_t *) xmalloc(sizeof(regex_t));
- xregcomp(*regex, temp, REG_NEWLINE);
+ xregcomp(*regex, temp, regex_type|REG_NEWLINE);
free(temp);
/* Move position to next character after last delimiter */
pos+=(next+1);
@@ -326,7 +326,7 @@ static int parse_file_cmd(sed_cmd_t * sed_cmd, const char *filecmdstr, char **re
static int parse_subst_cmd(sed_cmd_t * const sed_cmd, char *substr)
{
- int cflags = 0;
+ int cflags = regex_type;
char *match;
int idx = 0;
@@ -1115,12 +1115,15 @@ extern int sed_main(int argc, char **argv)
#endif
/* do normal option parsing */
- while ((opt = getopt(argc, argv, "ine:f:")) > 0) {
+ while ((opt = getopt(argc, argv, "irne:f:")) > 0) {
switch (opt) {
case 'i':
in_place++;
atexit(cleanup_outname);
break;
+ case 'r':
+ regex_type|=REG_EXTENDED;
+ break;
case 'n':
be_quiet++;
break;