Я пытаюсь исправить некоторые двуязычные XML-файлы, используя регулярные выражения, чтобы соответствовать известным образцам ошибочного содержимого и подставляя правильные значения. Большинство проблем в файлах xml можно считать опечатками или избыточными данными.
У меня есть инструмент для обработки текста, который работает в программном обеспечении без какой-либо поддержки регулярных выражений, но вся ситуация была бы намного проще, если бы я мог просто использовать sed или что-то подобное, чтобы написать сценарий для пакетного задания и оставить его на ночь. Пример сценария sed, который должен решить проблему, может выглядеть следующим образом:
#!/bin/sed -f
s/<prop type="Att::Status">New/<prop type="Att::Status">Not Validated/g
s/<prop type="Att::Status">Approved/<prop type="Att::Status">Validated/g
....
Я обнаружил, что sed не очень-то нравятся файлы UTF16, и, поскольку мы имеем дело с двуязычным xml в 34 различных языковых комбинациях, было бы очень опасно использовать такой инструмент, как iconv, чтобы обернуть вокруг сценария sed. Большинство инструментов преобразования кодировок приводят к некоторому повреждению, и я бы предпочел не тратить оставшуюся часть недели на то, чтобы решить, на каких языках скрипт работает правильно.
Стоит также упомянуть, что xml полон накопленных переводов клиента за последние несколько лет, поэтому в нем будет много неправильно сформированного синтаксиса, который может привести к отключению некоторых инструментов.
Итак, в общем, sed + iconv слишком рискован, у меня есть базовый инструмент для глобальной замены текста, у меня есть Notepad ++, у меня даже есть список выражений для замены в синтаксисе sed. Но есть ли более легкий / лучший способ?