私は、好きなテレビ番組のダウンロードされたエピソードのファイル名とフォルダー名をクリーンアップする小さなbashスクリプトを実行しようとしています。彼らはしばしば「[www.Speed.Cd]-Some.Show.S07E14.720p.HDTV.X264-SOMEONE」のように見えます、そして私は基本的にそのspeedcd広告ビットを取り除きたいだけです。
BASHの正規表現マッチングを使用してwww.Speed.Cd、スペース、ダッシュを削除するのは簡単ですが、私の人生では、照合する文字のリストに角かっこを含める方法がわかりません。[-[]は機能しません。また、[-\ []、[-\\ []、[-\\\ []、または削除する括弧の前にある任意の数のエスケープ文字も機能しません。
これが私がこれまでに得たものです:
[[ "$newfile" =~ ^(.*)([- \[]*(www\.torrenting\.com|spastikustv|www\.speed\.cd|moviesp2p\.com)[- \]]*)(.*)$ ]] &&
newfile="${BASH_REMATCH[1]}${BASH_REMATCH[4]}"
しかし、それは括弧で壊れます。
何か案は?
TIA、ダニエル:)
編集:あなたが疑問に思っている場合に備えて、大文字と小文字を区別しないマッチングを確実にするために「shopt-snocasematch」を使用していることにおそらく注意する必要があります:)
編集2:貢献してくれたすべての人に感謝します。私の発言にはいくつかの問題があったので、どちらの答えが「正しい」答えであるかは100%わかりません。実は、jw013が投稿した質問へのコメントだけが一番正確な答えでしたが、スペースをエスケープする必要があることをまだ理解していなかったので、その時点ではわかりませんでした。私はaefxxを選びました。それは基本的に同じことを言っているのですが、説明付きです:) ormaajの答えにも正しい答えのマークを付けたいと思います。彼は、私の表現にもっと重大な問題を見つけたからです。
とにかく、私が上で使用したアプローチは、不要なものを残して残すためにパーツを一致させて抽出しようとすることは、実際にはあまりエレガントではなく、すべてのケースをキャッチするわけではなく、「Some.Show.S07E14」のような本当に単純なものでもありません.720p.HDTV.X264-誰か-[www.Speed.Cd]"。代わりに、不要な部分だけを一致させて抽出するように書き直してから、元の文字列の文字列を次のように置き換えます(複数のブランドがある場合はループが発生します)。
# Remove common torrent site brandings, including surrounding spaces, brackets, etc.:
while [[ "$newfile" =~ ([[\ {\(-]*(www\.)?(torrentday\.com|torrenting\.com|spastikustv|speed\.cd|moviesp2p\.com|publichd\.org|publichd|scenetime\.com|kingdom-release)[]\ }\)-]*) ]]; do
newfile=${newfile//"${BASH_REMATCH[1]}"/}
done