我试图把一个文本行的像
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
它走的是\ 033的\ 0,并与原始字符串替换它。 在替换字符串倍增反斜线不会有所作为; 我仍然得到同样的输出文本。
我要如何插入庆典颜色逃进一个sed替换体现在哪里?
机会是sed
你使用的是不知道的八进制,但可以理解十六进制。 试试这个版本,看看它是否适合你(使用\x1b
代替\033
):
sed "s/ *13) \(.*\)/ \x1b[32m*\x1b[0m \1/"
你的“\ 033”实际上是在一个单一的ESC
(退出)字符,输出这一点,你可以使用以下的任何一种:
-
\o033
-
\d027
-
\x1B
-
\c[
用于CTRL-[
替换字符串中的双反斜线,并利用周围的sed的表达双引号代替单:
sed 's/ *13) \(.*\)/ \\033[32m*\\033[0m \1/'
这可以防止外壳从与sed的行为干扰。
~~~~~~~
更新:
使用脚本来实现干净的颜色:
colorize.sh
#!/bin/sh
HIGHLIGHT=`echo -e '\033[32m'`
NORMAL=`echo -e '\033[0m'`
sed "s/ *13) \(.*\)/ $HIGHLIGHT*$NORMAL \1/" yourinputtext
我有同样的问题,我用这种方式解决。
你可以试着改变你的代码:
sed "s/ *13) \(.*\)/ \033[32m*\033[0m \1/"
这个:
sed "s/ *13) \(.*\)/ $(echo '\033[32m')*$(echo '\033[0m') \1/"
其基本思想是用“回响”打印逃生命令。 它的工作对我来说,
我使用GAWK
gawk -v string1=$STRING1 -v IGNORECASE=1 ' { gsub ( string1 , "\033[1m&\033[0m" ) ; print } '
试试这个 :
sed "s/ *13) \(.*\)/ \\\\033 \1/"
即斜线斜线,斜线,斜线-033