Tôi đang thay thế, từ một tiêu đề nguồn cấp dữ liệu, tất cả các ký tự ngoại trừ chữ cái và chữ số bằng dấu gạch ngang để sử dụng kết quả làm tên tệp an toàn cho bất kỳ hệ thống tệp nào:
$ 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
Tuy nhiên, tôi muốn ngưng tụ tất cả các dấu gạch ngang lặp lại với một dấu như Episodie-06-No-hope-of-riding-home-NEW-Advanced-grammar
Tôi thấy tôi có thể đạt được nó bằng cách sử dụng thay thế hai lần:
$ 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
Tôi nghĩ rằng tôi có thể làm điều đó trong một lần như:
$ echo ${t//[^A-Za-z0-9]+/-}
nhưng nó không hoạt động.
Có manh mối nào không?
Lưu ý: Tôi không muốn đi cùng sed
hoặc các công cụ khác
shopt
và vỏ nào hỗ trợ nó.