Передача цветовых кодов из переменных 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"

Предоставлено:

  1. cal -h совет от @cyrus - это было важно.
  2. Совет по цитированию ANSI от @chepner - Это было критически важно.
  3. Строчные имена переменных из @charles-duffy - Лучшая практика.
Другие вопросы по тегам