Проектная лаборатория
Собственный Grep
Этап 33 · Подсветка
Автоматический выбор подсветки
Русский перевод заданий CodeCrafters. Примеры подготовлены для Go. Выбор языка меняет команды и результаты, но не текст задания.
На этом этапе вы добавите поддержку параметра --color=auto.
Параметр --color=auto
Параметр --color=auto позволяет grep автоматически выбирать, нужна ли подсветка, в зависимости от назначения вывода:
- Если поток вывода подключён к устройству TTY, например терминалу, подсветка включается.
- Если вывод передаётся другой команде по конвейеру или перенаправлен на устройство, не являющееся TTY, подсветка отключается.
Например, при запуске grep в терминале stdout подключён к TTY и подсветка включена:
Если же передать вывод другой команде по конвейеру, stdout больше не является TTY. Grep обнаруживает это и отключает подсветку:
$ echo -n "I have 3 apples" | ./your_program.sh --color=auto -E '\d' | hexdump -C
00000000 49 20 68 61 76 65 20 33 20 61 70 70 6c 65 73 |I have 3 apples|
0000000fОбратите внимание: в выводе нет управляющих последовательностей ANSI, только обычный текст.
То же происходит при перенаправлении вывода в файл:
$ echo -n "I have 4 apples" | ./your_program.sh --color=auto -E '\d' > output.txt
$ hexdump -C output.txt
00000000 49 20 68 61 76 65 20 34 20 61 70 70 6c 65 73 |I have 4 apples|
0000000fПараметр --color=auto полезен, поскольку управляющие последовательности ANSI могут выглядеть как бессмысленные символы при просмотре текстовых файлов или обработке другими программами. Определяя назначение вывода, grep может показывать человеку цветной текст, а программам передавать чистые данные.
Проверки
Тестирующая система запустит программу в терминале (TTY):
Если входные данные не соответствуют шаблону, программа должна:
- Завершиться с кодом
1.
Если входной текст соответствует шаблону, программа должна:
- Завершиться с кодом
0. - Вывести входной текст в стандартный вывод.
- Подсветить совпавший фрагмент в выводе.
Тестирующая система также передаст вывод другой команде по конвейеру:
# Piping to another command
$ echo -n "He has 9 rabbits" | grep --color=auto -E '\d' | another_commandЕсли входные данные не соответствуют шаблону, программа должна:
- Завершиться с кодом
1. - Ничего не вывести.
Если входной текст соответствует шаблону, программа должна:
- Завершиться с кодом
0. - Вывести входной текст в стандартный вывод.
- Не добавлять последовательности ANSI для подсветки совпадений.
Примечания
- Большинство языков позволяют проверить, является ли stdout устройством TTY:
isatty()в C,os.isatty(sys.stdout.fileno())в Python,System.console() != nullв Java и т. д.
Проверка в вашей IDE
Нужны Node.js, Git, Go 1.24+ для тестеров и инструменты выбранного языка. Тестеры загружаются и запускаются локально; отдельным проектам нужны дополнительные системные зависимости.
Настройка проекта и IDE
1. Создайте проект один раз
node '/opt/graphlms/tools/project-lab/cli.mjs' init grep ./my-grep --language go2. Откройте папку в IDE
cd ./my-grepРеализуйте требования этапа в созданном проекте.
Запустите из папки проекта
node '/opt/graphlms/tools/project-lab/cli.mjs' submit --stage na5Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.
Результат проверки
go / ЛОКАЛЬНОПодключение к локальной проверке…
Здесь появится результат
Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.