Готовьтесь к регулярному выражению - PullRequest
0 голосов
/ 30 августа 2009

Я получил переменную в bash-скрипте, которую мне нужно заменить. Единственная константа в строке состоит в том, что она будет заканчиваться на «_ (* x) xxxp.mov». Где x - это числа и могут иметь длину от 3 до 4. Например, я знаю, как заменить значение, но только если оно является константой:

echo 'whiteout-tlr1_1080p.mov' | sed 's/_[0-9]*[0-9][0-9][0-9]p.mov/_h1080p.mov/g'

Как перенести совпадение с регулярным выражением в строку замены?

Edit:

Хорошо, я только что узнал, что grep может печатать только совпадение, лучше ли сделать что-то подобное?

urltrail=$(echo $@ | grep -o [0-9]*[0-9][0-9][0-9]p.mov)
newurl=$(sed 's/$urltrail/h$urltrail/g')

Хм, попробовал вышеописанное, но зависаю.

Ответы [ 2 ]

1 голос
/ 30 августа 2009

Назад Ссылка

sed 's/_\([0-9]*[0-9][0-9][0-9]\)p.mov/_h\1p.mov/g'

Обратная ссылка \n, где n представляет собой одну цифру, соответствует подстроке, предварительно сопоставленной n -ому заключенному в скобки подвыражению регулярного выражения.

0 голосов
/ 30 августа 2009

Вы не добавляете старый путь в sed, поэтому sed ждет завершения ввода.

newurl=$(echo $@ |sed 's/$urltrail/h$urltrail/g')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...