2017-04-17 120 views
0

我在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' 

能否請你讓我知道如何使用桑達空字符串的字符串替換這些大膽的和正常的轉義序列?

回答

1

請用粗體/正常和使用正則表達式一個變種:

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「<<<」$ strbold 「)」; echo 耐心\是\美德 ' – Swadeep

+0

對不起,我的錯誤。當我們用%q爲字符串做printf時,它會在空格前加上反斜槓。所以,這很正常。這意味着,你的解決方案絕對是太棒了,我想要的。接受答案。 – Swadeep