Реализация утилит cat и grep на языке программирования Си стандарта C11. Для регулярных выражений используется библиотека regex.
cat [OPTION] [FILE]...
№ | Опции | Описание |
---|---|---|
1 | -b (GNU: --number-nonblank) | нумерует только непустые строки |
2 | -e предполагает и -v (GNU only: -E то же самое, но без применения -v) | также отображает символы конца строки как $ |
3 | -n (GNU: --number) | нумерует все выходные строки |
4 | -s (GNU: --squeeze-blank) | сжимает несколько смежных пустых строк |
5 | -t предполагает и -v (GNU: -T то же самое, но без применения -v) | также отображает табы как ^I |
grep [options] template [file_name]
№ | Опции | Описание |
---|---|---|
1 | -e | Шаблон |
2 | -i | Игнорирует различия регистра. |
3 | -v | Инвертирует смысл поиска соответствий. |
4 | -c | Выводит только количество совпадающих строк. |
5 | -l | Выводит только совпадающие файлы. |
6 | -n | Предваряет каждую строку вывода номером строки из файла ввода. |
7 | -h | Выводит совпадающие строки, не предваряя их именами файлов. |
8 | -s | Подавляет сообщения об ошибках о несуществующих или нечитаемых файлах. |
9 | -f file | Получает регулярные выражения из файла. |
10 | -o | Печатает только совпадающие (непустые) части совпавшей строки. |
$ git clone git@github.com:HubertFurr/s21_SimpleBashUtils.git
$ cd s21_SimpleBashUtils/src/cat
$ make
$ git clone git@github.com:HubertFurr/s21_SimpleBashUtils.git
$ cd s21_SimpleBashUtils/src/grep
$ make
Unit-тесты реализованы при помощи скриптов на python (src/cat/tests/test_cat.py и src/grep/tests/test_grep.py). Тесты сравнивают результаты работы стандартных cat и grep с результатами нашей реализации s21_cat и s21_grep через diff.
Для остановки запущенных тестов необходимо нажать q
$ git clone git@github.com:HubertFurr/s21_SimpleBashUtils.git
$ cd s21_SimpleBashUtils/src/cat
$ make test
$ git clone git@github.com:HubertFurr/s21_SimpleBashUtils.git
$ cd s21_SimpleBashUtils/src/grep
$ make test
make test_mac
- запуск тестов с проверками на fsanitize
make test_linux
- запуск тестов с проверками через valgrind
make test_hard
- запуск случайных тестов, будет осуществлять полный перебор всех возможных комбинаций флагов со случайными файлами
Кроме того, скрипты test_cat.py и test_grep.py позволяют конфигурировать отображение и какие проверки требуются, путем установки флагов в начале скрипта. Например, можно включить проверки через утилиту leaks.