Shell字符串操作,通配符范围

时间:2016-08-13 05:35:01

标签: string shell replace

我试图通过删除由一些分隔符分隔的子字符串来操作shell中的字符串。目前我在通配符中有一些不受欢迎的行为,如下所示:

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

在上面的示例中,我知道我想要删除的子字符串以'bad'开头,然后是随机'stuff.',我希望将其删除。我想保留字符串'goodstuff',但是,在此示例中,通配符采用最宽的范围而不是最窄的范围(采用*='stuff.goodstuff'而不是所需的行为*='stuff')。

有没有办法限制通配符的范围在'.'之后的第一个'badstuff'停止,而不知道'goodstuff'可能是什么?

1 个答案:

答案 0 :(得分:1)

启用分机。 glob(有关详细信息,请参阅此page

shopt -s extglob

你可以做到

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

导致

start.goodstuff.end