3

У меня есть XML-файл, содержащий код, и для использования его с xmllink мне нужно удалить ссылку.

XML-файл, содержащий:

<xml version="1.0" encoding="UTF-8" standalone="yes"?>
<PackingList xmlns="Link to somewhere#">
<morecode></morecode>

Использование sed 'sed s/PackingList.*\>/PackingList/g' xmlfile дает мне следующий результат (во 2-й строке):

<PackingList#">

в то время как это должно быть

<PackingList>

Что я делаю неправильно?

2 ответа2

2

Три вещи неправильно:-

  • Первая кавычка в команде 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
1

Попробуйте так:

sed 's/PackingList.*/PackingList>/g' xmlfile

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .