在包含含有颜色转义码的变量的sed命令中转义单引号?

时间:2013-11-13 16:37:56

标签: regex bash sed

我正在使用sed以彩色" is "替换"'s "的每个实例。

为此,它通过颜色变量 r 和空白变量 x 包围结果,这些变量按字面解释。 echo -e然后显示颜色。这里没什么新鲜的。

当我尝试添加撇号(实际上是单引号)时出现问题;如果不弄乱颜色转义码,我无法逃避它。

这是我没有撇号的代码我试图添加:

r='\e[0;31m'                    # red
x='\e[0m'                       # reset color
sed 's/ is /\'${r}'s\'${x}'/g'  # replace " is " by "'s "

我尝试过双引号,多个反斜杠,但是所有内容都破坏了颜色代码,或者无法逃脱单引号。与此同时,我使用的是真正的撇号('),但它并不是最好的解决方案,因为它在TTY中无法正确呈现。

1 个答案:

答案 0 :(得分:1)

如果您想保留单引号,则需要'"'"'

第一个引用结束当前单引号字符串。然后我们将"'"扩展为单引号。 \'也会起作用,但看起来不太好。

最后一个单引号再次启动引用的字符串。

您的案例中的另一种选择是"s/ is /${r}'s${x}/g"(即仅使用双引号)。

但是,你需要使用r='\\e[0;31m',因为字符串中的扩展会将一级转义字符串。