int main(int argc, char *argv[]) { regex_t re; int e; char buf[1024], *ptr; regmatch_t rm[10]; if (argc != 4) { fprintf(stderr, "Usage: %s \n", getprogname()); return EXIT_FAILURE; } if ((e = regcomp(&re, argv[1], REG_EXTENDED)) != 0) { regerror(e, &re, buf, sizeof(buf)); errx(EXIT_FAILURE, "regcomp(%s): %s\n", argv[1], buf); } switch (e = regexec(&re, argv[2], __arraycount(rm), rm, 0)) { case 0: if (aregsub(&ptr, argv[2], rm, argv[3]) < 0) err(EXIT_FAILURE, "substitution failed"); printf("%s\n", ptr); free(ptr); break; case REG_NOMATCH: printf("no match: %s\n", argv[3]); break; default: regerror(e, &re, buf, sizeof(buf)); errx(EXIT_FAILURE, "regexec(%s): %s\n", argv[3], buf); } return EXIT_SUCCESS; }