2016-08-13 7 views
1

Ich versuche, eine Zeichenfolge in der Shell zu manipulieren, indem ich eine Teilzeichenfolge durch Trennzeichen getrennt lösche. Zur Zeit habe ich einige unerwünschte Verhalten aus dem Wildcard-Zeichen wie folgt:Shellstring-Manipulation, Wildcard-Gültigkeitsbereich

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

Im obigen Beispiel sagen weiß, dass ich die Teil Ich suche beginnt mit 'bad' durch zufällige 'stuff.' zu entfernen, gefolgt von denen alle ich entfernen möchten. Ich möchte die Zeichenfolge 'goodstuff' behalten, aber in diesem Beispiel nimmt der Platzhalter den breitesten Bereich anstelle der schmalsten (unter *='stuff.goodstuff' anstelle des gewünschten Verhaltens *='stuff').

Gibt es eine Möglichkeit, den Umfang der Platzhalter auf den ersten '.' nach 'badstuff' zu stoppen, ohne zu wissen, was 'goodstuff' sein könnte?

Antwort

1

Mit aktiviert ext. glob (auf dieser page Details siehe)

shopt -s extglob

Sie

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

die

start.goodstuff.end 
in

Ergebnisse tun könnte