我試圖做一個很小的bash腳本,將清理下載發作的文件和文件夾名的一些電視節目,我喜歡。他們經常看起來像「[www.Speed.Cd] - Some.Show.S07E14.720p.HDTV.X264-一個人」,我基本上只是想去掉那個speedcd廣告位。BASH正則表達式匹配 - 包括方括號中的括號以匹配?
使用BASH中的正則表達式匹配很容易移除www.Speed.Cd,空格和破折號,但在我的生活中,我無法弄清楚如何將括號包含在要匹配的字符列表中。 [ - []不起作用,既不確實[ - \ [],[ - \\ [],[ - \\\ [],或我想刪除托架前述任意數量的轉義字符。
這裏是我到目前爲止有:
[[ "$newfile" =~ ^(.*)([- \[]*(www\.torrenting\.com|spastikustv|www\.speed\.cd|moviesp2p\.com)[- \]]*)(.*)$ ]] &&
newfile="${BASH_REMATCH[1]}${BASH_REMATCH[4]}"
但它打破的支架。
任何想法?
TIA, 丹尼爾:)
編輯:我也許應該注意到,我使用「禁用了javascript -s nocasematch」,以確保不區分大小寫的匹配,以防萬一你想知道:)
編輯2:感謝所有人的貢獻。我不能100%確定哪個答案是「正確的」,因爲我的發言有幾個問題。其實最準確的答案只是我的問題發表jw013評論,但我並沒有在當時得到它,因爲我還沒有明白過來,空間應該逃脫。我選擇了aefxx的作爲一個基本上說是相同的,但解釋:)會一直喜歡把一個正確的答案標記上ormaaj的回答,也因爲他發現我的表達更嚴重的問題。
無論如何,我在上面使用的方法,試圖匹配和提取要保留並留下不需要的部分的部分實際上不是非常優雅,並且不會捕獲所有情況,甚至不會像「某些.Show.S07E14.720p.HDTV.X264-SOMEONE - [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
代替'[ - \ []''試試[ - \ []'和'而不是[ - \]''試試[] - \]'。 – jw013 2012-04-16 21:30:38
謝謝,但沒有甜甜圈:( 對這些的任何想法?AFAICT,第一個逃避空間,至於第二個,BASH指南指出,當使用破折號作爲文字(而不是指定一個範圍),它必須以第一個字符的形式出現? – DanielSmedegaardBuus 2012-04-16 21:37:15