将字符串中的句点匹配到字符串中的下划线

时间:2014-11-05 14:32:53

标签: regex bash

我正在制作一个bash脚本,以自动将视频放入Plex库中。对于到目前为止看过的节目,以下正则表达式可以正常检测节目名称,季节和剧集编号。

#TV Show Name
sed -n 's/\(.*\).S[0-9]\{1,\}.*/\1/p'
#TV Show Season
sed -n 's/.*\(S[0-9]\{1,\}\).*/\1/p'
#TV Show Episode
sed -n 's/.*S[0-9]*\(E[0-9]*\).*/\1/p'

将视频移动到Plex库时会遇到麻烦。所有放在文件夹中的视频都由脚本处理,使用句号'。'作为空间。

例如, Once.Upon.A.Time.S01E01.avi,Marvels.Agents.Of.S.H.I.E.L.D.S01E01.avi等

由于Plex库格式使用下划线'_'来表示空格(这是在Linux服务器上),我只使用sed用下划线替换TV Show名称中的句点。然后我使用grep -i将它与Plex Library文件夹中包含TV Show的正确文件夹相匹配,并使用show / episode编号的其余部分将文件放在正确的位置。有趣的是,其中一个节目(实际上是Marvel's's of S.H.I.E.L.D.)恰好以其名字命名。

是否有一种简单的方法可以将文件名和plex文件夹名称匹配在一起,而不会出现上述的下划线问题?

或者我应该为这个特定节目设置一个例外吗?

1 个答案:

答案 0 :(得分:0)

如果您在将点转换为下划线并将所有点转换为问号(例如sed "s/\./\?/g")之前获取显示名称,则可以输入该名称(例如Marvels?Agents?Of?S?H?I?E?L?D)以查找找到适当的Plex库目录。

find /path/to/library -type d -iname "Marvels?Agents?Of?S?H?I?E?L?D"

这应该为您提供移动文件所需的目录,并且如果需要,还可以让您向后工作以将文件名中的点正确转换为下划线。