sed: accept -E as a synonym for -r
authorDavid A. Wheeler <dwheeler@dwheeler.com>
Mon, 28 Oct 2013 23:52:48 +0000 (00:52 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Mon, 28 Oct 2013 23:52:48 +0000 (00:52 +0100)
Signed-off-by: David A. Wheeler <dwheeler@dwheeler.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
editors/sed.c

index 3a0d917aa1b39c5b4ea078578f322ba1bd12c051..ef462843bd4b8bee5c7405d26cd0d655a9b9c8b3 100644 (file)
@@ -1435,15 +1435,21 @@ int sed_main(int argc UNUSED_PARAM, char **argv)
        IF_LONG_OPTS(applet_long_options = sed_longopts);
 
        /* -i must be first, to match OPT_in_place definition */
-       opt = getopt32(argv, "i::rne:f:", &opt_i, &opt_e, &opt_f,
+       /* -E is a synonym of -r:
+        * GNU sed 4.2.1 mentions it in neither --help
+        * nor manpage, but does recognize it.
+        */
+       opt = getopt32(argv, "i::rEne:f:", &opt_i, &opt_e, &opt_f,
                            &G.be_quiet); /* counter for -n */
        //argc -= optind;
        argv += optind;
        if (opt & OPT_in_place) { // -i
                atexit(cleanup_outname);
        }
-       if (opt & 0x2) G.regex_type |= REG_EXTENDED; // -r
-       //if (opt & 0x4) G.be_quiet++; // -n
+       if (opt & (2|4))
+               G.regex_type |= REG_EXTENDED; // -r or -E
+       //if (opt & 8)
+       //      G.be_quiet++; // -n (implemented with a counter instead)
        while (opt_e) { // -e
                add_cmd_block(llist_pop(&opt_e));
        }
@@ -1458,7 +1464,7 @@ int sed_main(int argc UNUSED_PARAM, char **argv)
                fclose(cmdfile);
        }
        /* if we didn't get a pattern from -e or -f, use argv[0] */
-       if (!(opt & 0x18)) {
+       if (!(opt & 0x30)) {
                if (!*argv)
                        bb_show_usage();
                add_cmd_block(*argv++);