Проектная лаборатория

Собственный Grep

0 / 33этапов пройдено

Этап 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 go

2. Откройте папку в IDE

cd ./my-grep

Реализуйте требования этапа в созданном проекте.

Запустите из папки проекта

node '/opt/graphlms/tools/project-lab/cli.mjs' submit --stage na5

Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.

Результат проверки

go / ЛОКАЛЬНО

Подключение к локальной проверке…

Здесь появится результат

Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.

GraphLMS — инженерная лаборатория роста