gpt4 book ai didi

regex - BASH 正则表达式匹配 - 在要匹配的括号字符列表中包括括号?

转载 作者:太空宇宙 更新时间:2023-11-04 11:43:18 26 4
gpt4 key购买 nike

我正在尝试编写一个小型 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 -s nocasematch”来确保不区分大小写的匹配,以防万一你想知道:)

编辑 2:感谢所有贡献者。我不是 100% 确定哪个答案是“正确的”,因为我的陈述有几个问题。实际上,最准确的答案只是jw013对我的问题的评论,但当时我没有得到它,因为我还不明白应该转义空格。我选择了 aefxx,因为它基本上说的是一样的,但有解释 :) 我也想在 ormaaj 的回答上加上正确答案标记,因为他发现我的表达有更多严重问题。

无论如何,我在上面使用的方法,试图匹配和提取部分以保留并留下不需要的部分确实不是很优雅,并且不会捕获所有情况,甚至不是像“Some. 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

最佳答案

好吧,这是我第一次听说 =~ 运算符,但这是我通过反复试验发现的:

if [[ $newfile =~ ^(.*)([-[:space:][]*(what|ever)[][:space:]-]*)(.*)$ ]] 
^^^^^^^^^^ ^^^^^^^^^^

看起来很奇怪但确实有效(刚刚测试过)。

编辑
引自 Linux 手册页 regex(7):

To include a literal ] in the list, make it the first character (following a possible ^). To include a literal -, make it the first or last character, or the second endpoint of a range. To use a literal aq-aq as the first endpoint of a range, enclose it in "[." and ".]" to make it a collating element (see below). With the exception of these and some combinations using aq[aq (see next paragraphs), all other special characters, including aq\aq, lose their special significance within a bracket expression.

关于regex - BASH 正则表达式匹配 - 在要匹配的括号字符列表中包括括号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58606692/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com