2016-08-13 63 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