Bash:无法使用Sed中的纯文本替换粗体文本字符串

问题描述:

我在bash中包含粗体文本的字符串,我想用纯文本替换它。基本上,我试图用sed用空字符串替换'\ e [3m'(粗体)和'\ e [0m'(普通)转义序列。我能够将普通文本转换为粗体文本,但反面不起作用。下面是代码:Bash:无法使用Sed中的纯文本替换粗体文本字符串

[email protected]:~$ normal=$'\e[0m' 
[email protected]:~$ bold=$'\e[1m' 
[email protected]:~$ str="Patience is Virtue" 
[email protected]:~$ strbold=$(echo $str | sed s"/Patience/${bold}Patience${normal}/g") 
[email protected]:~$ printf %q "$strbold"; echo 
$'\E[1mPatience\E[0m is Virtue' 

在下达命令回声-e“$ strbold”上述工作正常,并以粗体显示的字“忍”,而是试图做相反的时候,它不工作。

[email protected]:~$ strplain=$(echo "$strbold" | sed s"/${bold}//g") 
sed: -e expression #1, char 9: unterminated `s' command 
[email protected]:~$ strplain=$(echo "$strbold" | sed s"/\\e\[1m//g") 
[email protected]:~$ printf %q "$strplain"; echo 
$'\E[1mPatience\E[0m is Virtue' 

能否请你让我知道如何使用桑达空字符串的字符串替换这些大胆的和正常的转义序列?

请用粗体/正常和使用正则表达式一个变种:

format=$'\e\[(0|1)m' 
sed -r "s/${format}//g" <<< "$strbold" 
+0

我想你的方式,它几乎工作,但仍当我打印使用printf函数%q选项的输出,我得到2不需要的反斜杠。 '耐心'后一个'是'后一个。下面是代码: 'swady @ DESKTOP-QAVQ17K:〜$ format = $'\ e \ [(0 | 1)m' swady @ DESKTOP-QAVQ17K:〜$ printf%q“$ strbold”; echo''\ E [1mPatience \ E [0m is Virtue' swady @ DESKTOP-QAVQ17K:〜$ printf%q“$(sed -r”s/$ {format} // g“ Swadeep

+0

对不起,我的错误。当我们用%q为字符串做printf时,它会在空格前加上反斜杠。所以,这很正常。这意味着,你的解决方案绝对是太棒了,我想要的。接受答案。 – Swadeep