#include #include #include #include #include #include static int get_text(const char *path, std::string &text) { std::ifstream file(path); if (!file.is_open()) { std::cerr << "sed: file error" << std::endl; return (1); } std::getline(file, text, '\0'); file.close(); return (0); } static std::string replace_text(const char *text, const char *text_to_replace, const std::string &replacement_text) { size_t i; size_t len; std::string out; len = std::strlen(text_to_replace); i = 0; while (text[i] != '\0') { if (len != 0 && std::strncmp(text + i, text_to_replace, len) == 0) { out += replacement_text; i += len; } else { out += text[i]; i++; } } return (out); } int main(int ac, char **av) { std::string text; std::string replaced; if (!(ac >= 4)) { std::cerr << "Sed: missing argument" << std::endl << "syntax: ./sed file text_to_replace replacement_text" << std::endl; return (1); } if (get_text(av[1], text)) return (2); replaced = replace_text(text.c_str(), av[2], av[3]); std::ofstream file((std::string(av[1]) + std::string(".replace")).c_str()); if (!file.is_open()) { std::cerr << "sed: file error" << std::endl; return (1); } file << replaced << std::endl; }