我试图通过删除由一些分隔符分隔的子字符串来操作shell中的字符串。目前我在通配符中有一些不受欢迎的行为,如下所示:
string='start.badstuff.goodstuff.end'
echo ${string/bad*.} #start.end
在上面的示例中,我知道我想要删除的子字符串以'bad'
开头,然后是随机'stuff.'
,我希望将其删除。我想保留字符串'goodstuff'
,但是,在此示例中,通配符采用最宽的范围而不是最窄的范围(采用*='stuff.goodstuff'
而不是所需的行为*='stuff'
)。
有没有办法限制通配符的范围在'.'
之后的第一个'badstuff'
停止,而不知道'goodstuff'
可能是什么?
答案 0 :(得分:1)
启用分机。 glob(有关详细信息,请参阅此page)
shopt -s extglob
你可以做到
echo ${string/bad*([^.]).}
导致
start.goodstuff.end