I had a bunch of files labelled like:
text.s01e01.text.mkv
There are 22 files so I needed to quickly rename them to just 1.mkv, 2.mkv, etc. What I had to do was:
rename 's/text.S01E(0[1-9]).text/$1.mkv'/g *mkv
rename 's/text.S01E(1[0-9]).text/$1.mkv'/g *mkv
rename 's/text.S01E(2[0-2]).text/$1.mkv'/g *mkv
I tried doing S01E(0[1-22]) but that didn't work.
Can someone just help me understand why the Perl regular expression didn't work?
CodePudding user response:
You can use a single rename command instead of three :
rename 's/text\.s01e0?(\d )\.text/$1/' *.mkv
To test perl regex substitution :
perl -ne 's/text\.s01e0?(\d )\.text/$1/; print' <<< "text.s01e10.text.mkv"
# output : 10.mkv
CodePudding user response:
Assuming your rename supports Perl regular expression syntax, the problem with [1-22] is that the 22 does not work the way you expect it to work. The square brackets define Bracketed Character Classes. Single digits work as expected: [1-2] defines a range of characters between 1 and 2 (inclusive). [1-2] matches a 1 or a 2.
However, [1-22] is interpreted as the range 1-2 and the character 2. It matches 1 or 2 or 2 -- effectively just 1 or 2.
If you can tolerate matching all 2-digit sequences from 00 to 99, you could use:
([0-9]{2})
