在Bash中着色不是彩色文本

时间:2014-04-21 11:24:26

标签: bash text colors sed grep

我必须为文本中的某些单词着色,这样做很好,但是当它已经着色时我有一个问题。当它的颜色我不想再用不同的颜色着色它。我的问题是我的代码再次着色它,即使它已经着色了。

这是我的代码:

var=$(echo -e $line | grep ".*[^m]${word}[^\][^e].*" | sed -e "s/${word}/${color}${word}${endColor}/g")
if(var -n);then
line=$var
f

它的脚本是每个奇怪的颜色,甚至是你想要着色的单词。问题是当有一个单词已经着色并且我不想重新加载它。 输入可以是任何东西

这里是完整代码

function GetColor {
if [ $1 == 'r' ];then
color=$red;
fi
if [ $1 == 'b' ];then
color=$blue;
fi
if [ $1 == 'g' ];then
color=$green;
fi
}

red=$'\e[31m'
green=$'\e[32m'
blue=$'\e[34m'
endColor=$'\e[0m'
a=0
color=""
word=""
while read input
do
radek=$input
for i in $*; do
if (( a% 2 )); then
word=$i
var=$(echo -e $line | grep ".*[^m]${word}[^\][^e].*" | sed -e "s/${word}/${color}${word}${endColor}/g")
if(var -n);then
line=$var
fi
else
color=""
GetColor "$i"

fi
let "a += 1"
done

echo -e $line
exit
done

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

这是我的版本,但我刚刚让脚本运行没有错误。我不确定问题是什么,但已经上色的单词的颜色没有改变。

我怀疑

if(var -n);then

我纠正了

  if [ -n "$var" ]; then

这是脚本

function GetColor {
if [ $1 == 'r' ];then
color=$red;
fi
if [ $1 == 'b' ];then
color=$blue;
fi
if [ $1 == 'g' ];then
color=$green;
fi
}

red=$'\e[31m'
green=$'\e[32m'
blue=$'\e[34m'
endColor=$'\e[0m'
a=0
color=""
word=""
while read input
do
  line=$input
  for i in $*; do
    if (( a% 2 )); then
      word=$i
      var=$(echo -e $line | grep ".*[^m]${word}[^\][^e].*" | sed -e "s/${word}/${color}${word}${endColor}/g")
      if [ -n "$var" ]; then
        line=$var
      fi
    else
      color=""
      GetColor "$i"
    fi
    let "a += 1"
  done

  echo -e $line
  exit
done