aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Andersen <andersen@codepoet.org>2004-05-26 10:03:33 +0000
committerEric Andersen <andersen@codepoet.org>2004-05-26 10:03:33 +0000
commit9855548a77af4a5da971bed0632d21a141b84616 (patch)
tree0c4122fbd85c76c5bc244653a4eb82156c19f07f
parentd4d01d2b9bc1452c6417864ea5b300d34088c19a (diff)
downloadbusybox-w32-9855548a77af4a5da971bed0632d21a141b84616.tar.gz
busybox-w32-9855548a77af4a5da971bed0632d21a141b84616.tar.bz2
busybox-w32-9855548a77af4a5da971bed0632d21a141b84616.zip
Rob Landley writes:
add sed -r support. I bumped into a couple of things that want to use extended regular expressions in sed, and it really isn't that hard to add. Can't say I've extensively tested it, but it's small and isn't going to break anything that doesn't use it, so... Rob
-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 {
112 112
113/* globals */ 113/* globals */
114/* options */ 114/* options */
115static int be_quiet = 0, in_place=0; 115static int be_quiet = 0, in_place=0, regex_type=0;
116FILE *nonstdout; 116FILE *nonstdout;
117char *outname; 117char *outname;
118 118
@@ -298,7 +298,7 @@ static int get_address(char *my_str, int *linenum, regex_t ** regex)
298 298
299 temp=copy_parsing_slashn(pos,next); 299 temp=copy_parsing_slashn(pos,next);
300 *regex = (regex_t *) xmalloc(sizeof(regex_t)); 300 *regex = (regex_t *) xmalloc(sizeof(regex_t));
301 xregcomp(*regex, temp, REG_NEWLINE); 301 xregcomp(*regex, temp, regex_type|REG_NEWLINE);
302 free(temp); 302 free(temp);
303 /* Move position to next character after last delimiter */ 303 /* Move position to next character after last delimiter */
304 pos+=(next+1); 304 pos+=(next+1);
@@ -326,7 +326,7 @@ static int parse_file_cmd(sed_cmd_t * sed_cmd, const char *filecmdstr, char **re
326 326
327static int parse_subst_cmd(sed_cmd_t * const sed_cmd, char *substr) 327static int parse_subst_cmd(sed_cmd_t * const sed_cmd, char *substr)
328{ 328{
329 int cflags = 0; 329 int cflags = regex_type;
330 char *match; 330 char *match;
331 int idx = 0; 331 int idx = 0;
332 332
@@ -1115,12 +1115,15 @@ extern int sed_main(int argc, char **argv)
1115#endif 1115#endif
1116 1116
1117 /* do normal option parsing */ 1117 /* do normal option parsing */
1118 while ((opt = getopt(argc, argv, "ine:f:")) > 0) { 1118 while ((opt = getopt(argc, argv, "irne:f:")) > 0) {
1119 switch (opt) { 1119 switch (opt) {
1120 case 'i': 1120 case 'i':
1121 in_place++; 1121 in_place++;
1122 atexit(cleanup_outname); 1122 atexit(cleanup_outname);
1123 break; 1123 break;
1124 case 'r':
1125 regex_type|=REG_EXTENDED;
1126 break;
1124 case 'n': 1127 case 'n':
1125 be_quiet++; 1128 be_quiet++;
1126 break; 1129 break;