我将从提要标题中将字母和数字以外的所有字符替换为破折号,以将结果用作任何文件系统的安全文件名:
$ 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
或其他工具
您需要比传统的外壳通配符更强大的功能。在bash中,设置extglob
选项,它使您可以通过从ksh继承的异常语法访问glob模式中的正则表达式。
shopt -s extglob
sanitized=${raw//+([^A-Za-z0-9])/-}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句