我試圖從字符串中去除着色代碼;例如來自:\033[36;1mDISK\033[0m
到:DISK
Bash正則表達式:用任意數量的字符替換字符串
我正則表達式是這樣的:\033.*?m
所以匹配「\ 033」後跟任意數量的字符的,由「M」終止
,當我搜索模式,它找到了匹配; [[ "$var" =~ $regex ]]
評估結果爲true
但是,當我嘗試替換匹配時,沒有任何反應,並且返回相同的字符串。
這裏是我完整的腳本:
regex="\033.*?m"
var="\033[36;1mDISK\033[0m"
if [[ "$var" =~ $regex ]]
then
echo "matches"
echo ${var//$regex}
else
echo "doesn't match!"
fi
的問題似乎是與匹配任意數量的正則表達式的任何字符部分。我可以成功替換DISK
,但是如果我將其更改爲D.*K
或D.*?K
,則會失敗。
注意在上述所有情況下,模式聲明與字符串匹配,但替換時失敗。不太確定現在該去哪裏,任何幫助表示讚賞。
感謝
'$ {something // something-else}'不適用於正則表達式。你需要做的是在正則表達式中使用捕獲組,然後使用'$ {BASH_REMATCH [1]}'獲取第一個捕獲的子串,依此類推。 – doubleDown
也許你可以以某種方式避免在第一個地方脫色。您是否嘗試過使用「TERM」或「COLORTERM」變量? – mzedeler