Три вещи неправильно:-
- Первая кавычка в команде
sed должна быть перед опцией s/ , а не перед самой sed - я предполагаю, что это ошибка ввода.
- Символ
> не имеет специального значения в регулярных выражениях и не должен быть экранирован - последовательность \> имеет особое значение: это означает конец слова , а поскольку .* "Жадный", он соответствует концу последнего слова в строке отсюда и сохранение #" .
- Если вы соответствуете источнику
> , это будет включено в заменяемую строку, поэтому оно также должно появиться в замещающей строке.
Таким образом, ваша команда редактирования должна быть:
sed 's/PackingList.*>/PackingList>/g' xmlfile
Это похоже на решение jherran, но учитывает вашу первоначальную попытку сопоставления. Возможно, будет лучше соответствовать двойной кавычке:
sed 's/PackingList.*"/PackingList/g' xmlfile
Если вы не хотите полагаться на жадность (и сделать ее более читабельной), используйте:
sed 's/PackingList.*".*"/PackingList/g' xmlfile
Обратите внимание, что любые последующие теги XML в той же строке могут быть удалены любым из вышеперечисленных: чтобы избежать этого, используйте:
sed 's/PackingList[^>]*"[^>]*"/PackingList/g' xmlfile