通过sed传递来自bash变量的颜色代码

时间:2015-12-23 19:38:08

标签: bash sed ansi-escape

我在bash脚本中遇到sed的一点问题:

#!/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

Sed不会改变颜色。有什么想法吗?

3 个答案:

答案 0 :(得分:3)

\033并非由正常引号内的shell专门处理。使用ANSI引用。

RED=$'\033[0;31m'
NC=$'\033[0m' # No Color

答案 1 :(得分:1)

向命令-h添加选项cal以禁用此处自己的今日突出显示。

请参阅:cal | cat -Acal -h | cat -A

答案 2 :(得分:0)

这应该给你想要的东西:

 #!/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"

<强>提供者:

    来自@cyrus的
  1. cal -h小费 - 这很关键。
  2. 来自@chepner的ANSI引用提示 - 这很关键。
  3. 来自@ charles-duffy的小写变量名 - 最佳实践。