Проектная лаборатория
Собственный Grep
Этап 29 · Подсветка
Подсветка одного совпадения
Русский перевод заданий CodeCrafters. Примеры подготовлены для Go. Выбор языка меняет команды и результаты, но не текст задания.
На этом этапе вы добавите подсветку одного совпадения.
Флаг --color
Флаг --color указывает grep подсвечивать совпавший текст в выводе. Он принимает три значения:
always: всегда использовать цвет;auto: использовать цвет только при выводе в терминал;never: никогда не использовать цвет.
На этом этапе реализуйте вариант --color=always.
Подсветка совпавшего текста
Если пользователь передаёт --color=always, grep подсвечивает совпавший текст, окружая его специальными кодами форматирования.
Например:
Совпадение ("1") отображается в терминале красным полужирным шрифтом.
Управляющие последовательности ANSI
Grep использует управляющие последовательности ANSI для добавления цвета. Терминал интерпретирует эти специальные последовательности символов как команды форматирования, а не обычный текст.
По умолчанию grep выделяет совпавший текст красным полужирным шрифтом.
Чтобы подсветить совпавший текст:
- Вставьте перед ним открывающую последовательность, задающую начертание и цвет.
- Вставьте после него закрывающую последовательность, сбрасывающую форматирование.
Для красного полужирного текста используются следующие последовательности ANSI:
\033[01;31m
...
\033[mРазберём открывающую последовательность (\033[01;31m):
| Компонент | Значение |
|---|---|
\033 |
Символ Escape, начинающий управляющую последовательность ANSI |
[ |
Начало параметров Select Graphic Rendition (SGR) |
01;31 |
Коды SGR: 01 — полужирный/яркий текст, 31 — красный цвет текста (разделены ;) |
m |
Конец последовательности SGR |
Закрывающая последовательность (\033[m):
| Компонент | Значение |
|---|---|
\033 |
Символ Escape, начинающий управляющую последовательность ANSI |
[ |
Начало параметров SGR |
| (пусто) | Отсутствие параметров сбрасывает все атрибуты к значениям по умолчанию |
m |
Конец последовательности SGR |
Например, чтобы получить такой вывод:
Можно использовать любую из последовательностей:
hello\033[01;31mmatched\033[mworld
# OR
hello\033[31;01mmatched\033[mworldПроверки
Тестирующая система запустит программу так:
Если входные данные не соответствуют шаблону, программа должна:
- Завершиться с кодом
1. - Ничего не вывести.
Если входной текст соответствует шаблону, программа должна:
- Завершиться с кодом
0. - Вывести входной текст в стандартный вывод.
- Подсветить совпавший текст цветом grep по умолчанию.
Примечания
- На этом этапе достаточно одного совпадения. Несколько совпадений будут рассмотрены позже.
- Порядок кодов SGR не важен:
\033[31;01mи\033[01;31mдают одинаковое красное полужирное выделение. - Нужно найти позицию совпадения во входной строке, вставить открывающую последовательность перед ним, а закрывающую — после.
Проверка в вашей 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 bm2Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.
Результат проверки
go / ЛОКАЛЬНОПодключение к локальной проверке…
Здесь появится результат
Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.