Ich ersetze aus einem Feed-Titel alle Zeichen außer Buchstaben und Ziffern durch einen Bindestrich, um das Ergebnis als sicheren Dateinamen für jedes Dateisystem zu verwenden:
$ t="Episodie 06: No hope of riding home (NEW) - Advanced grammar"
$ echo ${t//[^A-Za-z0-9]/-}
Episodie-06--No-hope-of-riding-home--NEW----Advanced-grammar
Ich möchte jedoch alle sich wiederholenden Striche mit einem einzigen wie verdichten Episodie-06-No-hope-of-riding-home-NEW-Advanced-grammar
Ich habe festgestellt, dass ich es mit einer Zwei-Pass-Substitution erreichen kann:
$ t="Episodie 06: No hope of riding home (NEW) - Advanced grammar"
$ tmp=${t//[^A-Za-z0-9]/-}
$ echo ${tmp//--/-}
Episodie-06-No-hope-of-riding-home-NEW--Advanced-grammar
Ich dachte, ich könnte es in einem einzigen Durchgang tun wie:
$ echo ${t//[^A-Za-z0-9]+/-}
aber es funktioniert nicht.
Irgendeine Ahnung?
Hinweis: Ich möchte nicht mit sed
oder anderen Tools gehen
shopt
und welche Muscheln es unterstützen.