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

c86crjj0  于 2022-11-26  发布在  Python
关注(0)|答案(1)|浏览(216)

我正在尝试编写一个bash脚本来转换家庭网络上的流文件。
我想知道社区是否可以推荐一些东西,允许我使用现有的正则表达式搜索字符串中是否存在模式,并替换模式后面的文本。
其中一部分包括命名文件以包括质量、发行年份和剧集信息(如果其中任何一项可用)。
我有一些Python正则表达式,我试图转换成一个bash正则表达式搜索和替换。
有几个选项,如Sed,Grep或AWK,但我不确定什么是最适合我的方法。
我现有的python正则表达式显然使用了一个扩展的perl形式的正则表达式。

# 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
5sxhfpxr

5sxhfpxr1#

我简化了正则表达式,例如,如果您需要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

相关问题