您的echo
命令中有两个问题。
为了简洁起见,我扩展了变量。
$ echo -e "test TEST test" | sed -e "s/TEST/\e[1;37mTEST\e[0m/g"
test e[1;37mTESTe[0m test
第一个问题:反斜线丢失在sed魔术和shell魔术之间。你必须逃避他们。
$ echo -e "test TEST test" | sed -e "s/TEST/\\e[1;37mTEST\\e[0m/g"
test e[1;37mTESTe[0m test
仍然不起作用。也许更逃避?
$ echo -e "test TEST test" | sed -e "s/TEST/\\\e[1;37mTEST\\\e[0m/g"
test \e[1;37mTEST\e[0m test
最后,反斜杠即将通过。我不知道为什么我们需要三个反斜杠,这是一些奇怪的魔法。
第二个问题:echo -e
没有意义。-e
启用反斜杠转义的解释,但所有echo -e
要解释的是"test TEST test"
。反斜杠转义符来自sed,它不关心它们并将其原始打印。
您想要的是:
$ echo -e $(echo "test TEST test" | sed -e "s/TEST/\\\e[1;37mTEST\\\e[0m/g")
test TEST test
在输出中有大胆的测试。
这是带有更改的完整脚本:
#!/bin/bash
ColorOff='\\\e[0m' # Text Reset
BWhite='\\\e[1;37m' # Bold White
string="test TEST test"
echo -e $(echo "$string" | sed -e "s/TEST/${BWhite}TEST${ColorOff}/g")
echo -e "${BWhite}AAAA${ColorOff}"
显示`\ AAAA`。可惜的是,因为我需要保留regular_color_constants和SED_color_constants。实际上,我只希望有regular_color_constants,并修复echo和sed选项以获得所需的内容。