Ми влаштувалися на роботу до місцевої бібліотеки, де допомагаємо впорядковувати колекцію старих книжок. Студенти, які приходять до бібліотеки, часто шукають цитати, які памʼятають лише наполовину, щоб процитувати їх у своїх курсових роботах. Замість того щоб вручну читати кожну книжку від першої до останньої сторінки, ми вирішуємо створити невеликий інструмент, який буде сканувати їх, шукаючи ці уривки цитат.
Знайти у файлах рядки, що містять рядок пошуку, і повернути всі знайдені рядки.
Команда Unix grep шукає у файлах рядки, що відповідають регулярному виразу.
Наше завдання - реалізувати спрощену команду grep, яка підтримує пошук фіксованих рядків тексту (англ. string).
Команда grep приймає три аргументи:
Далі вона читає вміст указаних файлів (у вказаному порядку), знаходить рядки, що містять рядок пошуку, і нарешті повертає ці рядки в порядку, у якому їх було знайдено. Під час пошуку в кількох файлах перед кожним знайденим рядком додається імʼя файлу та двокрапка (':').
Команда grep підтримує такі прапорці:
-n Додає номер рядка та двокрапку (':') перед кожним рядком у вихідних даних, розміщуючи номер після імені файлу (якщо воно є).-l Виводить лише імена файлів, які містять принаймні один знайдений рядок.-i Шукає з порівнянням без урахування регістру.-v Інвертує роботу програми: збирає всі рядки, що не відповідають умові пошуку.-x Шукає лише ті рядки, які повністю збігаються з рядком пошуку.У пакеті grep визначте одну функцію Go, Search, яка приймає шаблон у вигляді рядка тексту (англ. string), зріз прапорців, які є рядками тексту, і зріз назв файлів, які є рядками тексту. Search має повернути вихідні дані для заданих прапорців і назв файлів у вигляді зрізу рядків тексту.
Використовуйте таку сигнатуру для функції Search:
func Search(pattern string, flags, files []string) []string {
Зареєструйтеся на Exercism, щоб вивчати й опановувати Go, а також 34 концепції165 вправ та справжнє наставництво від людей, і все це безкоштовно.