changeset 1707:27d570eee68d draft

BSD sed uses -E instead of -r to enable ERE. GNU sed silently supports -E as an alias for -r too.
author Isabella Bosia <izaberina@gmail.com>
date Sat, 28 Feb 2015 15:21:13 -0600
parents 2d5e3e345c14
children 3746a6d29d87
files toys/posix/sed.c
diffstat 1 files changed, 5 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/toys/posix/sed.c	Sat Feb 28 12:39:16 2015 -0600
+++ b/toys/posix/sed.c	Sat Feb 28 15:21:13 2015 -0600
@@ -7,13 +7,13 @@
  * TODO: lines > 2G could signed int wrap length counters. Not just getline()
  * but N and s///
 
-USE_SED(NEWTOY(sed, "(version)e*f*inr", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_LOCALE))
+USE_SED(NEWTOY(sed, "(version)e*f*inrE", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_LOCALE))
 
 config SED
   bool "sed"
   default y
   help
-    usage: sed [-inr] [-e SCRIPT]...|SCRIPT [-f SCRIPT_FILE]... [FILE...]
+    usage: sed [-inrE] [-e SCRIPT]...|SCRIPT [-f SCRIPT_FILE]... [FILE...]
 
     Stream editor. Apply one or more editing SCRIPTs to each line of input
     (from FILE or stdin) producing output (by default to stdout).
@@ -23,6 +23,7 @@
     -i	Edit each file in place.
     -n	No default output. (Use the p command to output matched lines.)
     -r	Use extended regular expression syntax.
+    -E	Alias for -r.
     -s	Treat input files separately (implied by -i)
 
     A SCRIPT is a series of one or more COMMANDs separated by newlines or
@@ -803,7 +804,7 @@
         if (!(s = unescape_delimited_string(&line, 0, 1))) goto brand;
         if (!*s) corwin->rmatch[i] = 0;
         else {
-          xregcomp((void *)reg, s, (toys.optflags & FLAG_r)*REG_EXTENDED);
+          xregcomp((void *)reg, s, (toys.optflags & (FLAG_r | FLAG_E))*REG_EXTENDED);
           corwin->rmatch[i] = reg-toybuf;
           reg += sizeof(regex_t);
         }
@@ -897,7 +898,7 @@
       // allocating the space was done by extend_string() above
       if (!*TT.remember) corwin->arg1 = 0;
       else xregcomp((void *)(corwin->arg1 + (char *)corwin), TT.remember,
-        ((toys.optflags & FLAG_r)*REG_EXTENDED)|((corwin->sflags&1)*REG_ICASE));
+        ((toys.optflags & (FLAG_r | FLAG_E))*REG_EXTENDED)|((corwin->sflags&1)*REG_ICASE));
       free(TT.remember);
       TT.remember = 0;
       if (*line == 'w') {