В sed в базовом режиме скобки должны быть экранированы:
$ echo "$pathname" | sed -n 's/.*[[:digit:]]\{1,2\}x\([[:digit:]][[:digit:]]\).*/\1/p'
02
Для большей переносимости я использовал [[:digit:]]]
вместо \d
. Я также добавил .*
в конец, чтобы убрать текст в конце.
grep -P
grep -P
поддерживает функцию look-behind, но текст look-behind должен быть фиксированной длины. Поэтому мы можем искать одну цифру, предшествующую x
, предшествующую двум цифрам, которые мы хотим отобразить:
$ echo "$pathname" | grep -oP '(?<=\dx)(\d\d)'
02
Оба приведенных выше способа также работают с альтернативным путем:
$ echo '/a/long/path/of/mine/12x02 - bar.mp4' | grep -oP '(?<=\dx)(\d\d)'
02
$ echo '/a/long/path/of/mine/12x02 - bar.mp4' | sed -n 's/.*[[:digit:]]\{1,2\}x\([[:digit:]][[:digit:]]\).*/\1/p'
02