2016-08-13 12 views
1

一部の区切り文字で区切られた部分文字列を削除してシェルの文字列を操作しようとしています。次のように現在、私は、ワイルドカード文字からいくつかの望ましくない動作が生じています:上記の例でシェル文字列操作、ワイルドカードスコープ

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

は、私は私が削除したいすべてがランダム'stuff.'続い'bad'で始まるを削除しようと部分文字列を知っていると言います。しかし、この例では、ワイルドカードは、最も狭い範囲の代わりに最も広い範囲を取っています(という文字列を保持したい場合は、*='stuff'の代わりに*='stuff.goodstuff'を使用してください)。

'goodstuff'が何であるか知らずに、'badstuff'の後に最初の'.'の後にワイルドカードのスコープを停止する方法はありますか?

答えて

1

有効なext。あなたができる

shopt -s extglob

グロブ(詳細については、このpageを参照してください)

start.goodstuff.end 
になり

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