Три вещи неправильно:-
- Первая кавычка в команде
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