Вы можете использовать
sed -E 's/(\.\/)?[0-9]+_[A-Z][A-Z]-[0-9]+.+/\1/'
Обратите внимание, что sed
не поддерживает регулярное выражение PCRE, поэтому \d
и \w
являются просто недопустимыми конструкциями здесь.Чтобы сопоставить любую букву, вы можете использовать [:alpha:]
класс символов POSIX, или, если вы хотите сопоставить заглавные буквы, используйте [:upper:]
.
Вместо \d
, используйте [0-9]
или [:digit:]
.
В шаблоне BRE POSIX (
и )
обозначают литеральные скобки, поэтому вы получили сообщение о том, что вы не можете сослаться на какое-либо значение группы захвата - в шаблоне не было определено ни одного.Чтобы сделать неэкранированные скобки, создайте группу в шаблоне POSIX BRE, вам нужно их экранировать или - если вы используете шаблон POSIX ERE (sed
с опцией -r
или -E
), вы можете использовать их без экранирования.
То же самое относится к +
квантификатору: в паттерне POSIX BRE он должен экранироваться, в паттерне ERE можно использовать его без экранирования.
Кроме того, вам не нужно использоватьвторая группа захвата, поскольку вы не используете \2
в качестве замены.