将Python正则表达式转换为Bash正则表达式



我正在尝试编写一个bash脚本来转换家庭网络上的流媒体文件。

我想知道社区是否可以推荐一些东西,允许我使用我现有的正则表达式来搜索一个字符串的模式的存在,并替换以下模式的文本。

这部分包括命名文件,包括质量,发行年份和剧集信息(如果有的话)。

我有一些Python正则表达式,我试图转换为bash正则表达式搜索和替换。

有一些选项,如Sed, Grep或AWK,但我不确定哪种方法最适合我的方法。

我现有的python regex显然使用了扩展的perl regex形式。

# Captures quality 1080p or 720p
determinedQuality = re.findall("[0-9]{3}[PpIi]{1}|[0-9]{4}[PpIi]{1}", next_line)
# Captures year (4 characters long and only numeric)
yearInitial = str(re.findall("[0-9]{4}[^A-Za-z]", next_line))
# Lazy programming on my part to clear up the string gathered from the year
determinedYear = re.findall("[0-9]{4}", yearInitial)
# If the string has either S00E00 or 1X99 present then its a TV show
determinedEpisode = re.findall("[Ss]{1}[0-9]{2}[Ee]{1}[0-9]{2}|[0-9]{1}[x]{1}[0-9]{2}", next_line)

我的目标是在文件名中使用小写下划线,而不是文件名中的空格,如果可能的话,还有质量信息:

# Sample of desired file names
harry_potter_2001_720p_philosphers_stone.mkv
S01E05_fringe_1080p.mkv

我简化了正则表达式,例如,如果你需要3或4,你可以使用{3,4},{1}是多余的,你可以删除它。

#!/bin/bash
INPUT="harry_potter_2001_720p_philosphers_stone.mkv"
#INPUT="S01E05_fringe_1080p.mkv"
determinedQuality=$(echo "$INPUT" | grep -Po '[0-9]{3,4}[PpIi]')
determinedYear=$(echo "$INPUT" | grep -Po '[0-9]{4}[^A-Za-z]' | grep -Po '[0-9]{4}')
determinedEpisode=$(echo "$INPUT" | grep -Po '[Ss]{1}[0-9]{2}[Ee][0-9]{2}|[0-9]x[0-9]{2}')
echo "quality: $determinedQuality"
echo "year: $determinedYear"
echo "episode: $determinedEpisode"

第一个的输出:

quality: 720p
year: 2001
episode: 

第二个输出:

quality: 1080p
year: 
episode: S01E05

最新更新