Skip to content

IKYTARO/SimpleBashUtils

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Simple Bash Utils

dayp02

Разработка утилит Bash по работе с текстом: cat, grep.

Оглавление

Аннотация

Данный проект был выполнен для ознакомления с базовыми утилитами Bash по работе с текстом на языке программирования С. В качестве утилит были выбраны cat и grep, которые достаточно часто используются при работе в терминале Linux. В рамках данного проекта был получен опыт организации утилит Bash, и применения структурного подхода при разработке.

Утилита cat

История cat

cat был частью ранних версий Unix, например, Версии 1, и заменил pr, утилиту PDP-7 и Multics для копирования одного файла на экран.

Использование my_cat

cat — одна из наиболее часто используемых команд в Unix-подобных операционных системах. Команда имеет три взаимосвязанные функции в отношении текстовых файлов: отображение, объединение их копий и создание новых.

./my_cat [OPTION] [FILE]...

Опции my_cat

Опция Описание
1 -b, --number-nonblank Нумерует только непустые строки
2 -e Эквивалентно -vE
3 -E, --show-ends Отображает символы конца строки как $
4 -n, --number Нумерует все выходные строки
5 -s, --squeeze-blank Сжимает несколько смежных пустых строк
6 -t Эквивалентно -vT
7 -T, --show-tabs Отображает табуляцию как ^I
8 -v, --show-nonprinting Использует обозначения ^ и M-, за исключением LFD и TAB
9 -V, --version Выводит информацию о версии и выходит
10 --help Выводит данное описание и выходит

Утилита grep

История grep

Томпсон написал первую версию на PDP-11 языке ассемблера, чтобы помочь Ли Э. МакМахону проанализировать текст «Записок Федералиста» и определить авторство отдельных статей. Текстовый редактор ed (также созданный Томпсоном) имел поддержку регулярных выражений, но его нельзя было использовать для такого большого объема текста, поэтому Томпсон извлек этот код в отдельный инструмент. Он выбрал это название, потому что в ed команда g / re / p печатала все строки, соответствующие заданному шаблону. grep впервые был включен в Версию 4 Unix. Заявив, что он «обычно упоминается как прототип программного средства», Макилрой приписал grep «безвозвратное внедрение» философии инструментов Томпсона в Unix.

Использование my_grep

./my_grep [OPTION]... PATTERNS [FILE]...

Опции my_grep

Pattern selection and interpretation

Опция Описание
1 -e, --regexp=PATTERNS Использует PATTERNS в качестве шаблона
2 -f, --file=FILE Берет PATTERNS из FILE
3 -i, --ignore-case Игнорирует различия регистра в шаблонах и данных

Miscellaneous

Опция Описание
4 -v, --invert-match Инвертирует смысл поиска соответствий
5 -V, --version Выводит информацию о версии и выходит
6 --help Выводит данное описание и выходит

Output control

Опция Описание
7 -s, --no-messages Подавляет сообщения об ошибках о несуществующих или нечитаемых файлах
8 -n, --line-number Предваряет каждую строку вывода номером строки из файла ввода
9 -h, --no-filename Выводит совпадающие строки, не предваряя их именами файлов
10 -o, --only-matching Печатает только совпадающие (непустые) части совпавшей строки
11 -l, --files-with-matches Выводит только совпадающие файлы
12 -c, --count Выводит только количество совпадающих строк

Структура проекта

Проект имеет модульную структуру для лучшей организации кода.

└── SimpleBashUtils/        # Репозиторий с исходным кодом и ресурсами
    ├── cat/                # Модуль, реализующий утилиту cat
    │   ├── test/               # Директория с текстовыми файлами для тестов
    │   ├── cat_utils.c         # Модуль, реализующий парсинг и обработку опций
    │   ├── cat_utils.h         # Заголовочный файл
    │   ├── cat.c               # Основной модуль с функцией main
    │   ├── Makefile            # Управление сборкой cat
    │   └── run_test.sh         # Скрипт, реализующий тестирование cat
    ├── grep/               # Модуль, реализующий утилиту grep
    │   ├── test/               # Директория с текстовыми файлами для тестов
    │   ├── grep_utils.c        # Модуль, реализующий парсинг и обработку опций
    │   ├── grep_utils.h        # Заголовочный файл
    │   ├── pattern_utils.c     # Модуль для хранения и извлечения переданных шаблонов
    │   ├── pattern_utils.h     # Заголовочный файл
    │   ├── grep.c              # Основной модуль с функцией main
    │   ├── Makefile            # Управление сборкой grep
    │   └── run_test.sh         # Скрипт, реализующий тестирование grep        
    ├── resources/          # Каталог с ресурсами
    └── README.md           # Документация на русском

Установка и сборка

Для сборки проекта требуется make и компилятор gcc.

  1. Клонируйте репозиторий:

    git clone [ссылка на РЕПОЗИТОРИЙ]
  2. Перейдите в каталог с интересующей вас утилитой

    cd cat/  # утилита cat
    # или
    cd grep/ # утилита grep
  3. Соберите проект с помощью Makefile:

    make all

Исполняемый файл выбранной утилиты (my_cat или my_grep) будет создан в соответсвующей директории.

Цели Makefile

Цели Makefile имеют одинаковые названия для обеих утилит.

Основные цели сборки

Команда Описание
make all Сборка проекта
make clean Удаление собранных файлов
make rebuild Полная пересборка (clean + build)

Проверка кода

Для форматировния кода потребуется clang-format, исходные настройки стиля (.clang-format) прилагаются к проекту. Для статического анализа кода потребуется cppcheck (2.7).

Команда Описание
make format Форматирование кода clang-format
make check-format Проверка стиля кода
make cppcheck Статический анализатор кода

Проверка программы

Для проверки утечек памяти потребуется valgrind (3.18.1).

Команда Описание
make valgrind Анализ программы на наличие утечек памяти
make test Запуск тестирования утилиты на базе сравнения с поведением реальной утилит Bash

About

Разработка утилит Bash по работе с текстом: cat, grep.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors