結果をすべてのファイルシステムの安全なファイル名として使用するために、フィードタイトルの文字と数字を除くすべての文字をダッシュに変更しました。
$ 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
しかし、繰り返されるすべてのダッシュを1つのダッシュに圧縮したいと思います。Episodie-06-No-hope-of-riding-home-NEW-Advanced-grammar
私は2つの代替パスを使用してこれを達成できることを発見しました。
$ 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
注:他のツールを使用したくありません。
ベストアンサー1
既存のシェルワイルドカードよりも強力なものが必要です。 Bashからextglob
正規表現へのアクセスを提供するこのオプションを設定します。グローバルモードkshから継承された珍しい構文を介して。
shopt -s extglob
sanitized=${raw//+([^A-Za-z0-9])/-}