Estou substituindo, de um título de feed, todos os caracteres, exceto letras e dígitos, por um traço para usar o resultado como um nome de arquivo seguro para qualquer sistema de arquivos:
$ 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
No entanto, eu gostaria de condensar todos os traços repetidos com um único Episodie-06-No-hope-of-riding-home-NEW-Advanced-grammar
Descobri que posso consegui-lo usando uma substituição de duas passagens:
$ 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
Eu pensei que poderia fazê-lo em uma única passagem como:
$ echo ${t//[^A-Za-z0-9]+/-}
mas não funciona.
Qualquer pista?
Nota: não quero usar sed
nem outras ferramentas
shopt
quais conchas o suportam.