部分文字列置換リストの簡素化[閉じる]

部分文字列置換リストの簡素化[閉じる]

私は音楽を再生するスクリプトを書いた。ところでファイル名がおかしいですね。

このファイル名文字列があるとします。

Muzzy__Break_Away__28feat._Priority_One_29__5BMonstercat_EP_Release_5D.mp3

私はこの目的を達成したいと思う。

Muzzy Break Away feat Priority One

これまで私はこれをbashに持っています。

file="whatever";
file=${file//_/" "};
file=${file//[0123456789ABCDEF][0123456789ABCDEF]/""};  #replaces bytes
file=${file//.extension1/""};
file=${file//.extension2/""};
file=${file//.extensionn/""}; #many more, e.g. .mp3
file=${file//word1/""};
file=${file//word2/""};
file=${file//wordn/""}; #many more, e.g. Monstrcat
file=${file//./""};
echo "$file";

1つのコマンドで同じ順序(大文字と小文字を区別)でこれを単純化する方法はありますか?

ベストアンサー1

Perlを呼び出すこともできます:

formatted=$( perl -lpe '
        s/([0-9A-F]{2})/chr hex $1/eg;   # hex to ascii
        s/_+/ /g;                        # underscores to space
        s/\[[^]]*\]//g;                  # remove bracketed text
        s/[^[:alnum:][:blank:]]//g;      # remove non-alphanumeric,non-blank chars
    ' <<<"${file%.*}"
)
echo "$formatted"
Muzzy Break Away feat Priority One

おすすめ記事