Замена строки XPath в файле xsl

У меня есть XSL-файл с XPath, который соответствует XML-файлу со стандартом UBL 2.0, и мне нужен XPath, чтобы соответствовать стандарту UBL 2.1.

Количество файлов, которые нуждаются в изменении, слишком велико, поэтому я пытаюсь использовать команду sed для замены XPath в каждом файле. Я попробовал следующую команду:

sed -i 's/select="\/ns1:Invoice\/cac:AccountingSupplierParty\/cbc:CustomerAssignedAccountID"\/>/select="\/ns1:Invoice\/cac:AccountingSupplierParty\/cac:Party\/cac:PartyIdentification\/cbc:ID"\/>/g' path/to/file 

XPath содержит символы, которые нужно экранировать, поэтому я сомневаюсь, что у меня не возникнет проблем с заменой путей текущей структурой команды.

После запуска команды для получения вывода в другом файле:

 sed -e 's/select="\/ns1:Invoice\/cac:AccountingSupplierParty\/cbc:CustomerAssignedAccountID"\/>/select="\/ns1:Invoice\/cac:AccountingSupplierParty\/cac:Party\/cac:PartyIdentification\/cbc:ID"\/>/g' file > output 

Я получаю вывод:

 sed: -e expression #1, char 216: unterminated `s' command 

При изменении XML-файлов sed самом деле не лучший выбор, так как он не имеет ни малейшего представления о том, что структура редактируемого файла имеет структуру, и с удовольствием превратит правильно сформированный документ в плохо сформированный кашу. Вместо этого вам следует использовать инструмент с поддержкой XML: я буду использовать xsltproc и XSLT, но утилита XML grep, скорее всего, тоже xsltproc этой задачей.

Сначала создайте таблицу стилей преобразования идентификаторов, которая заменяет старое значение атрибута select новым:

replace.xslt

              

Затем запустите xsltproc для файла, который нужно преобразовать:

 xsltproc replace.xslt /path/to/inputfile.xml > /path/to/convertedfile.xml 

Как обычно, подтвердите, что преобразование делает правильную вещь; Я отказался от того, что вы предоставили, поэтому для полной конвертации могут потребоваться другие изменения.