2016-08-13 62 views
1

我試圖通過刪除由某些分隔符分隔的子字符串來操縱shell中的字符串。目前,我有如下的通配符一些意外的行爲:Shell字符串操作,通配符範圍

string='start.badstuff.goodstuff.end' 
echo ${string/bad*.} #start.end 

在上面的例子說,我知道,我設法消除與'bad'所有這一切我想刪除開始,然後隨機'stuff.'的子字符串。然而,我想保留字符串'goodstuff',但在本例中,通配符采用最寬的範圍而不是最窄的範圍(以*='stuff.goodstuff'代替所需的行爲*='stuff')。

有沒有辦法限制通配符的範圍在'badstuff'之後的第一個'.'處停止,而不知道'goodstuff'可能是什麼?

回答

1

With enabled ext。水珠(請參閱本page瞭解詳細信息)

shopt -s extglob

你可以做

echo ${string/bad*([^.]).} 

導致

start.goodstuff.end