Я заменяю из заголовка канала все символы, кроме букв и цифр, тире, чтобы использовать результат в качестве безопасного имени файла для любой файловой системы:
$ 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
Однако я бы хотел сжать все повторяющиеся тире одним Episodie-06-No-hope-of-riding-home-NEW-Advanced-grammar
Я обнаружил, что могу добиться этого с помощью двухпроходной замены:
$ 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
Я думал, что смогу сделать это за один проход, например:
$ echo ${t//[^A-Za-z0-9]+/-}
но это не работает
Любая подсказка?
Примечание: я не хочу использовать sedдругие инструменты
shoptкакие оболочки поддерживают это.