我想尝试一行像
这样的文字 13) Check for orphaned Path entries
并将其更改为(我希望bash颜色代码为输出着色,而不是在屏幕上显示)
\033[32m*\033[0m Check for orphaned Path entries
使用bash颜色代码对星号进行着色以使其更加突出。我有一个sed命令执行大部分操作,除了它没有正确处理颜色代码,因为它将它们视为对替换文本的引用。
到目前为止我所拥有的:
sed "s/ *13) \(.*\)/ \033[32m*\033[0m \1/"
在我在开头给出的字符串上运行时产生以下输出:
13) Check for orphaned Path entries33[32m* 13) Check for orphaned Path entries33[0m Check for orphaned Path entries
正在取\ 0的\ 0并将其替换为原始字符串。将替换字符串中的反斜杠加倍并没有什么区别;我仍然得到相同的输出文本。
如何将bash颜色转义插入sed替换表达式?
答案 0 :(得分:9)
您使用的sed
可能无法理解八进制,但它可能理解十六进制。试试这个版本,看看它是否适合您(使用\x1b
代替\033
):
sed "s/ *13) \(.*\)/ \x1b[32m*\x1b[0m \1/"
答案 1 :(得分:8)
您的'\ 033'实际上是一个ESC
(转义)字符,要输出此字符,您可以使用以下任何一项:
\o033
\d027
\x1B
\c[
CTRL-[
答案 2 :(得分:2)
将替换字符串中的反斜杠加倍,并在sed表达式周围使用单引号而不是双引号:
sed 's/ *13) \(.*\)/ \\033[32m*\\033[0m \1/'
这可以防止shell干扰sed行为。
~~~~~~~
更新
使用脚本干净地实现颜色:
colorize.sh
#!/bin/sh
HIGHLIGHT=`echo -e '\033[32m'`
NORMAL=`echo -e '\033[0m'`
sed "s/ *13) \(.*\)/ $HIGHLIGHT*$NORMAL \1/" yourinputtext
答案 3 :(得分:2)
我遇到了同样的问题,我以这种方式解决了。
您可以尝试更改代码:
sed "s/ *13) \(.*\)/ \033[32m*\033[0m \1/"
进入这个:
sed "s/ *13) \(.*\)/ $(echo '\033[32m')*$(echo '\033[0m') \1/"
基本思想是使用'echo'打印escape命令。 它对我有用,
答案 4 :(得分:0)
我用gawk
gawk -v string1=$STRING1 -v IGNORECASE=1 ' { gsub ( string1 , "\033[1m&\033[0m" ) ; print } '
答案 5 :(得分:-1)
试试这个:
sed "s/ *13) \(.*\)/ \\\\033 \1/"
即。斜线斜线斜线斜线-033