Необходимо написать некоторое подобие утилиты sl
. Для того чтобы иметь представление что делает данная утилита, для ubuntu можно поставить ее через sudo apt-get install sl
и после завершения установки написать в терминале sl
. Если вы упали со стула потому что на вас поехал паровоз - вы на правильном пути.
В данном домашнем задании мы не ограничиваем вас только поездом, в общем случае это должна быть какая-то ASCII-картинка которая будет как-то дергаться.
Создаем убийцу grep
. Для тех кто не знает что это такое - советую пойти поиграться в консоль с этой утилитой. Если кратко - то это утилита для поиска строк, содержащих текст в файлах. Атомарной единицей для этой утилиты является строка. То есть при поиске если вы находите в строке искомый текст - она выдает вам обратно в STDOUT строку.
Если вы зайдете в мануал то увидите что формат команды примерно такой:
grep [options] PATTERN [FILE...]
grep [options] [-e PATTERN | -f FILE] [FILE...]
Первый формат означает что в команду сперва передаются опции, затем какой-то текст для поиска в файле и затем 1 или несколько файлов. Второй формат примерное такой же, но использует регулярные выражения для поиска по файлам.
В результате домашнего задания вам нужно написать утилиту grep с несколько ограниченным функционалом. Необходимые опции которые вам надо реализовать:
-A
- опция которая выводит количество строк до и после найденной строки-e
- опция которая позволяет вводить регулярные выражения вместо просто части строки-R
- опция которая говорит искать строку не в одном файле, а рекурсивно во всех файлах в папке-z
- опция указывающая что файлик является сжатым и сначала его надо разжать и только потом искать по нему.
Для примера будем использовать файлик 1.txt со следующим содержанием:
aa
bb
cc
abc
bcd
cde
ggg
Результаты выполнения:
grep a 1.txt
=> aa
=> abc
grep -A 1 ab 1.txt
=> cc
=> abc
=> bcd
grep -A 1 b 1.txt
=> aa
=> bb
=> cc
=> cc
=> abc
=> bcd
=> abc
=> bcd
=> cde
grep -e "a[^b]" 1.txt
=> aa
Для того чтобы вы сразу не писали огромную утилиту разобьем ее имплементацию на несколько этапов:
- Сделайте утилиту которая просто без опций находит строки в файле.
- Добавьте возможность искать по нескольким файлам, aka
grep a 1.txt 2.txt
- Добавьте опцию
-A
которая выводит соседние строки. - Добавьте опцию
-e
которая ищет по регуляркам - Добавьте опцию
-R
которая будет искать по всем файлам в папке - Добавьте опцию
-z
которая будет искать по сжатому через gzip файлу
Задания принимаются только ввиде ссылки на гитхаб.