Bash 逃离'\';sed表达式中替换字符串中的字符
我试着写一行文字,比如Bash 逃离'\';sed表达式中替换字符串中的字符,bash,string,sed,escaping,Bash,String,Sed,Escaping,我试着写一行文字,比如 13) Check for orphaned Path entries 并将其更改为(我希望bash颜色代码为输出着色,而不是在屏幕上显示) 使用bash颜色代码将星号上色,使其更加突出。我有一个sed命令可以完成大部分工作,但它不能正确处理颜色代码,因为它将它们视为替换文本的引用 到目前为止,我所拥有的: sed "s/ *13) \(.*\)/ \033[32m*\033[0m \1/" 当对我在开头给出的字符串运行时,将生成以下输出: 13) Ch
13) Check for orphaned Path entries
并将其更改为(我希望bash颜色代码为输出着色,而不是在屏幕上显示)
使用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并将其替换为原始字符串。在替换字符串中加倍反斜杠并没有什么区别;我仍然得到相同的输出文本
如何将bash颜色转义插入到sed替换表达式中?将替换字符串中的反斜杠加倍,并在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 \1/"
i、 e.slash-slash-slash-033您正在使用的
sed
可能不懂八进制,但它可能懂十六进制。尝试此版本以查看它是否适合您(使用\x1b
而不是\033
):
您的“\033”实际上是单个
ESC
(转义)字符,要输出此字符,您可以使用以下任意一种:
\o033
\d027
\x1B
对于\c[
CTRL-[
- 我也有同样的问题,我用这种方法解决了
您可以尝试更改代码:
sed "s/ *13) \(.*\)/ \033[32m*\033[0m \1/"
为此:
sed "s/ *13) \(.*\)/ $(echo '\033[32m')*$(echo '\033[0m') \1/"
基本思想是使用“echo”打印转义命令。
这对我很有效,我用的是呆呆的
gawk -v string1=$STRING1 -v IGNORECASE=1 ' { gsub ( string1 , "\033[1m&\033[0m" ) ; print } '
虽然sed现在没有尝试替换\0,但我仍然没有得到彩色输出。更具体地说,我得到\033[32m*\033][0m直接输出到控制台,而不转换为颜色代码不太清楚您的意思…我的目标是解决替换字符串中转义“\”字符的问题,并且这样做了--我得到了与您在“将其更改为”中引用的相同的输出文本除此之外,你比我更清楚你在寻找什么颜色;只是想确保你有足够的工具来实现这一点。:-)刚刚看到你的更新--我误解了你的“将其更改为”字符串,然后…认为这是您想要输出的。嗯…PS-我的脚本可以工作,但丹尼斯·威廉姆森的回答完成了同样的事情,而且要短得多。使用他的。将反斜杠翻两番会产生与使用单引号和双斜杠相同的效果,正如@DrearPirateshawn建议的那样。我得到\033[32m*\033[0m直接输出到控制台,不转换为颜色代码。基本上是一样的。这就是为什么我的head已经删除了我的评论。如果它确实是grok octal,请使用\o033@Hasturkun:这就是为什么阅读信息文件是值得的。有时候男人就是不剪切它。谢谢你的信息。@Dennis:你是说有时候男人没有与八进制前缀的info?+1相同的手册-大多数程序只识别前导零。
sed "s/ *13) \(.*\)/ $(echo '\033[32m')*$(echo '\033[0m') \1/"
gawk -v string1=$STRING1 -v IGNORECASE=1 ' { gsub ( string1 , "\033[1m&\033[0m" ) ; print } '