Передача цветовых кодов из переменных bash через sed
У меня есть небольшая проблема с sed в bash script:
#!/bin/bash
clear
DAY=$(date -d "$D" '+%d')
MONTH=$(date -d "$D" '+%m')
YEAR=$(date -d "$D" '+%Y')
RED='\033[0;31m'
NC='\033[0m' # No Color
cal >> plik1.txt
echo "ni po wt sr cz pi so"
awk '{if(NR>2)print}' plik1.txt | sed s/$DAY/${RED}${DAY}${NC}/g
echo "Miesiac: $MONTH Rok: $YEAR Dzien: $DAY"
rm plik1.txt
Сед не меняет цвет. Любая идея?
3 ответа
\033
не обрабатывается специально оболочкой внутри обычных кавычек. Используйте ANSI цитирование.
RED=$'\033[0;31m'
NC=$'\033[0m' # No Color
Добавить опцию -h
командовать cal
отключить собственную подсветку cal на сегодня.
Увидеть: cal | cat -A
а также cal -h | cat -A
Это должно дать то, что вы ищете:
#!/bin/bash
clear
day=$(date -d "$D" '+%d')
echo "DAY : "$day
month=$(date -d "$D" '+%m')
year=$(date -d "$D" '+%Y')
red=$'\033[0;31m'
nc=$'\033[0m'
echo "ni po wt sr cz pi so"
awk '{if(NR>2)print}' <(cal -h) | sed "s/$day/${red}${day}${nc}/"
echo "Miesiac: $month Rok: $year Dzien: $day"
Предоставлено:
cal -h
совет от @cyrus - это было важно.- Совет по цитированию ANSI от @chepner - Это было критически важно.
- Строчные имена переменных из @charles-duffy - Лучшая практика.