Содержание
Что такое ANSI-коды?
ANSI-коды (ANSI escape codes/sequences) — это стандартные управляющие последовательности для терминалов, которые позволяют управлять выводом текста: цветом, позицией курсора, стилями и другими параметрами. В настоящее время они поддерживаются большинством терминалов (Linux/macOS терминалы, Windows Terminal, PowerShell 5.1+, ConEmu).
Вот некоторые примеры ANSI-кодов:
• Базовые цвета текста (30-37)
o \033[30m # Черный
o \033[31m # Красный
o \033[32m # Зеленый
o \033[33m # Желтый
o \033[34m # Синий
o \033[37m # Белый
• Цвета фона (40-47, 100-107)
o \033[41m # Красный фон
o \033[42m # Зеленый фон
o \033[103m # Ярко-желтый фон
• Стили текста
o \033[0m # Сброс всех атрибутов (самый важный!)
o \033[1m # Жирный (bright/intensive)
o \033[2m # Тусклый (dim/faint)
o \033[3m # Курсив
o \033[4m # Подчеркнутый
o \033[5m # Медленное мигание
o \033[7m # Инвертированные цвета
o \033[8m # Скрытый текст
o \033[9m # Зачеркнутый
Пример для использования в Windows
Также стоит обратить внимание, что классическая командная строка (cmd.exe) не поддерживает ANSI-коды для окрашивания текста. Попытка их вывести приведёт к отображению служебных символов (например, ←[31m) вместо изменения цвета. Поэтому мы воспользуемся PowerShell.
Конструкция для изменения цвета выглядит следующим образом:
"$([char]27)[31mЭтот текст красный$([char]27)[0m"
• При помощи первой её части - "$([char]27) мы объявляем ESC — служебный символ (ASCII 27 или 0x1B).
• Далее идет [31m – это ANSI-код для красного цвета текста.
• [0m - код для сброса цвета к исходному.
В итоге получается следующий скрипт:
$target = "google.com" # Замените на нужный хост
ping $target | ForEach-Object {
$line = $_
if ($line -match "Превышен интервал ожидания|Request timed out|потеряно|host unreachable") {
# Выводим строку красным
"$([char]27)[31m$line$([char]27)[0m"
}
elseif ($line -match "TTL=|Ответ от") {
# Выводим строку с успешным ответом зелёным (опционально)
"$([char]27)[32m$line$([char]27)[0m"
}
else {
# Остальные строки без изменений
$line
}
}
Сохраняем скрипт в файл с расширением .ps1 (например, ping-color.ps1).и запускаем в PowerShell. При необходимости можно менять значение в строке $target = "google.com" на нужное вам.
Результат:

Пример использования в Linux №1
Приведем аналогичный пример и для Linux. Самый простой способ - использовать grep с цветовым выделением:
ping google.com | grep --color=always -E "(Превышен интервал ожидания|Request timed out|unreachable|100% packet loss|timeout|no answer)"
При использовании такого метода понадобится переменная GREP_COLORS. Для демонстрации была выполнена команда export, чтобы временно создать данную переменную и назначить ей значение.

Но можно пойти и по более сложному пути. Напишем свой собственный скрипт, в котором выделим информацию разными цветами:
#!/bin/bash
# Проверка аргументов
if [ $# -eq 0 ]; then
echo "Использование: $0 <хост> [дополнительные опции ping]"
exit 1
fi
host="$1"
shift # Передаем остальные аргументы в ping
# Цветовые коды
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
echo -e "${BLUE}Pinging $host...${NC}"
echo "Нажмите Ctrl+C для остановки"
echo ""
ping "$host" "$@" | while IFS= read -r line; do
# Обработка различных сообщений об ошибках
if [[ "$line" =~ (Превышен интервал ожидания|Request timed out) ]]; then
echo -e "${RED}[TIMEOUT] $line${NC}"
elif [[ "$line" =~ (Destination Host Unreachable|unreachable) ]]; then
echo -e "${RED}[UNREACHABLE] $line${NC}"
elif [[ "$line" =~ (100% packet loss) ]]; then
echo -e "${RED}[COMPLETE LOSS] $line${NC}"
elif [[ "$line" =~ (bytes from|ttl=|icmp_seq=.*ttl=) ]]; then
# Успешный ответ - зеленым
echo -e "${GREEN}$line${NC}"
elif [[ "$line" =~ (ping statistics) ]]; then
# Статистика - желтым
echo -e "${YELLOW}$line${NC}"
else
# Остальной вывод без цвета
echo "$line"
fi
done
Не забудьте сделать файл исполняемым, после чего его можно использовать:
chmod +x colorping.sh
./colorping.sh google.com

Пример использования в Linux №2
Пройдем чуть дальше и представим, что нам нужно проверить сразу большое количество хостов. Воспользуемся ansible для решения данной задачи. В файле ping-check.yml будет реализована сама проверка, а сами хосты расположим в отдельном файле – hosts.txt.
Содержимое файла ping-check.yml:
---
- name: Компактная цветная проверка
hosts: localhost
gather_facts: false
tasks:
- name: Цветной вывод доступных и недоступных хостов
ansible.builtin.shell: |
exec > /dev/tty
RED='\033[0;31m'
GREEN='\033[0;32m'
NC='\033[0m'
echo "=== ДОСТУПНЫЕ ХОСТЫ (зеленые) ==="
while IFS= read -r line; do
host=$(echo "$line" | sed 's/#.*//' | xargs)
[ -z "$host" ] && continue
if ping -c 1 -W 1 "$host" > /dev/null 2>&1; then
echo -e "${GREEN}✓ $host${NC}"
fi
done < hosts.txt
echo ""
echo "=== НЕДОСТУПНЫЕ ХОСТЫ (красные) ==="
while IFS= read -r line; do
host=$(echo "$line" | sed 's/#.*//' | xargs)
[ -z "$host" ] && continue
if ! ping -c 1 -W 1 "$host" > /dev/null 2>&1; then
echo -e "${RED}✗ $host${NC}"
fi
done < hosts.txt
args:
executable: /bin/bash
changed_when: false
Содержимое файла hosts.txt:
google.com
ya.ru
github.com
8.8.8.8
1.1.1.1
192.168.77.77
nonexistent.local
10.0.0.999
10.0.2.101
10.0.2.102
Результат выполнения проверки:

Заключение
ANSI-коды — это простой, но мощный способ визуализировать вывод в терминале. Как мы увидели на примере ping, цвет превращает скучный текст в интуитивный интерфейс: красный мгновенно показывает проблему, зелёный подтверждает успех.
Главная формула: \033[31m — красный, \033[0m — сброс цвета. Остальное — ваше творчество.
Добавляйте цвета в свои скрипты. Иногда лучшая система оповещения — это вовремя подсветившаяся красным строка в терминале.
А узнать больше про Linux, Ansible и многое другое можно у нас на курсах!
Будьте в курсе всех событий
Подпишись на рассылку актуальных новостей
и читай нас в соц. сетях