逸出的替换字符串“\\”字在一个sed表达(Escaping the '\\' ch

2019-06-24 13:12发布

我试图把一个文本行的像

    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替换体现在哪里?

Answer 1:

机会是sed你使用的是不知道的八进制,但可以理解十六进制。 试试这个版本,看看它是否适合你(使用\x1b代替\033 ):

sed "s/ *13) \(.*\)/ \x1b[32m*\x1b[0m \1/"


Answer 2:

你的“\ 033”实际上是在一个单一的ESC (退出)字符,输出这一点,你可以使用以下的任何一种:

  • \o033
  • \d027
  • \x1B
  • \c[用于CTRL-[


Answer 3:

替换字符串中的双反斜线,并利用周围的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


Answer 4:

我有同样的问题,我用这种方式解决。

你可以试着改变你的代码:

sed "s/ *13) \(.*\)/ \033[32m*\033[0m \1/"

这个:

sed "s/ *13) \(.*\)/ $(echo '\033[32m')*$(echo '\033[0m') \1/"

其基本思想是用“回响”打印逃生命令。 它的工作对我来说,



Answer 5:

我使用GAWK

gawk -v string1=$STRING1 -v IGNORECASE=1 ' { gsub ( string1 , "\033[1m&\033[0m" ) ; print } '


Answer 6:

试试这个 :

sed  "s/ *13) \(.*\)/ \\\\033 \1/"

即斜线斜线,斜线,斜线-033



文章来源: Escaping the '\\' character in the replacement string in a sed expression