Estoy reemplazando, desde un título de fuente, todos los caracteres, excepto letras y dígitos, con un guión para usar el resultado como un nombre de archivo seguro para cualquier sistema de archivos:
$ 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
Sin embargo, me gustaría condensar todos los guiones repetidos con uno solo como Episodie-06-No-hope-of-riding-home-NEW-Advanced-grammar
Descubrí que puedo lograrlo usando una sustitución de dos pases:
$ 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
Pensé que podría hacerlo en una sola pasada como:
$ echo ${t//[^A-Za-z0-9]+/-}
Pero no funciona.
¿Cualquier pista?
Nota: no quiero ir con sed
u otras herramientas
shopt
y qué shells lo respaldan.