Vim не имеет опции эмулировать регулярные выражения awk-стиля, нет. Существует много диалектов regex, и к сожалению всегда существуют эти небольшие диалектические различия для отслеживания при движении от одного инструмента до другого.
Попробуйте это:
newname=`echo "$filename" | sed -e 's/\(S[0-9][0-9]E[0-9][0-9]\).*\.mp4/\1.mp4/'`
Регулярное выражение:
В выражении замены:
Предположим, у Вас есть список имен файлов с путями в file-list
файл, попробуйте следующее
while IFS= read -r path; do
newpath=$(printf '%s\n' "$path" |
sed 's/\(.*S[0-9]*E[0-9]*\.\).*\.\([^.]*\)$/\1\2/')
echo mv -- "$path" "$newpath"
done <file-list
Значение sed
используемое регулярное выражение, также по сравнению с примером вводится "The.Big.Bang.Theory.S01E01.xxxxxxxxxxx.mp4"
\( start of group 1
.* The.Big.Bang.Theory. any sequence of characters
S[0-9]* S01 a capital S followed by 0 or more digits
E[0-9]* E01 a capital E followed by 0 or more digits
\. . a dot
\) end of group 1
.* xxxxxxxxxxx any sequence of characters
\. . a dot
\( start of group 2
[^.]* mp4 a sequence of 0 or more non-dot characters
\) end of group 2
$ end of line
В выводе, строке \1\2
означает "вывод group1 сопровождаемый group2 (так для удаления xxxxxxxxxxx.
)
Удалите echo
если удовлетворено.
S[0-9]{2}E[0-9]{2}
вместо S[0-9]*E[0-9]*
если Вы хотите соответствовать точно 2 цифрам после S и E.
– Peter.O
22.08.2011, 15:49
\([sS][0-9][0-9][eE][0-9][0-9]\)
– glenn jackman 22.08.2011, 17:02