Ошибка замены Sed

У меня есть шаблон, который я пытаюсь сопоставить:

<x>anything</x>

Я пытаюсь заменить «что угодно» (это может быть любой текст, а не текст — (.*)) на «что-то», чтобы любые вхождения стали:

<x>something</x>

Я пытаюсь использовать следующую команду sed:

sed "s/<x>.*</x>/<x>something</x>/g" file  

Я получаю следующую ошибку:

sed: -e expression #1, char 19: unknown option to `s'

Может ли кто-нибудь указать мне в правильном направлении?


sed
person Riley Kidd    schedule 18.08.2013    source источник
comment
возможный дубликат Sed - неизвестный параметр для `s'   -  person tripleee    schedule 10.08.2014


Ответы (2)


Косые черты в закрывающих XML-тегах сбивают с толку. Попробуйте избежать их следующим образом:

sed "s/<x>.*<\/x>/<x>something<\/x>/g" file

Очевидно, вы также можете использовать знак равенства которого я никогда раньше не видел. Я изменю кучу сценариев, когда приступлю к работе!

person chooban    schedule 18.08.2013

Это может сработать для вас (GNU sed):

sed -r 's/(<x>)[^<]*/\1something/g' file

Это похоже на замену <x> и что-то, что не является < на <x>something несколько раз в одной строке.

Н.Б. .* является жадным и вполне может поглотить последующие теги в той же строке.

person potong    schedule 18.08.2013