У меня есть файл, который содержит вывод s3bin sync
в формате следующимСЭД Invalid предшествующее регулярное выражение при попытке использовать захватывая группу по поиску и замене
Sync: s3://my-bin-url/source/000/000/001.jpg -> s3://my-bin-url/400/x/000/000/001.jpg
Sync: s3://my-bin-url/source/000/000/002.jpg -> s3://my-bin-url/400/x/000/000/002.jpg
Sync: s3://my-bin-url/source/000/000/003.jpg -> s3://my-bin-url/400/x/000/000/003.jpg
Я хочу, чтобы в конечном итоге с файлом, содержащим следующий
000/000/001.jpg
000/000/002.jpg
000/000/003.jpg
Я пытаюсь сделать это с помощью sed
с помощью следующей команды. Это содержится в сценарии #!/bin/sh
, а $2
соответствует абсолютному пути к файлу. Этот файл всегда существует.
sed --in-place --regexp-extended '/.*((?:[0-9]{3}\/){2}[0-9]{3}\.jpg)/\1/gi' $2
Когда я выполнить сценарий, я получаю следующее сообщение об ошибке
sed: -e expression #1, char 36: Invalid preceding regular expression
Попытки смотреть на этот вопрос не дали каких-либо полезных ответов до сих пор, только предложения вращаются вокруг обеспечивающих /
является (который он есть) и ускользает от {}
(который, по-видимому, применяется, если не используется --regexp-extended
я попытался изменить из '/ 'to' # 'безрезультатно ранее. Это удаление 'g' из'/gi' и добавление предшествующих '' ', которые его исправили. Благодарю. Устанавливается на 's /.* (([0-9] {3} \ /) {2} [0-9] {3} \. Jpg)/\ 1/i' (я знаю, что ваша версия не нужна/escaping, но там вы идете) –
Вы можете поместить 'g' обратно, но это не нужно, так как это sed заменяет только одну строку. И да 'sed -r 's /.* (([0-9] {3} \ /) {2} [0-9] {3} \. Jpg)/\ 1/i' файл' также будет работать , – anubhava
Не очень важно, 'g' действительно работает, как вы говорите. Как раз перед тем, как я разместил это, я добавил в '-r' (чтобы зафиксировать проблему фигурных фигурных скобок), я думаю, я просто не пробовал' s/'с' -r' и т. Д.! –