1

У меня есть XML-файл

в которой строка, которую нужно искать:

SEARCH='<?xml version="1.0" encoding="UTF-8" standalone="no"?><SSC>'

Это искомое значение необходимо заменить значением в следующей переменной или также можно сохранить в другом файле:

REPLACE='<?xml version="1.0" encoding="UTF-8" standalone="no"?><SSC><ErrorContext><CompatibilityMode>0</CompatibilityMode><ErrorOutput>1</ErrorOutput>.......some more tags.....</MethodContext>
'

Как это можно сделать с помощью команд Unix, таких как SED или AWK? (Здесь ПОИСК необходимо заменить на ЗАМЕНИТЬ.

2 ответа2

0

Насколько я вижу символы, которые нужно экранировать:

awk '/<\?xml version="1.0" encoding="UTF-8" standalone="no"\?><SSC>/ {print "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><SSC><ErrorContext><CompatibilityMode>0</CompatibilityMode><ErrorOutput>1</ErrorOutput>.......some more tags.....</MethodContext>"}' <<< '<?xml version="1.0" encoding="UTF-8" standalone="no"?><SSC>'
  • в поле ПОИСК: вы хотите избежать? символы от \?
  • в поле ЗАМЕНА: вы хотите экранировать "символы по \"

Или, если вам нужно использовать переменные, также экранируйте «в поле ПОИСК и дважды экранируйте символы, один раз для сохранения в переменной и дважды для отображения!

SEARCH_escaped=`sed -e 's/\?/\\\?/g' -e 's/\"/\\\"/g' <<< $SEARCH`
REPLACE_escaped=`sed 's/\"/\\\"/g' <<< $REPLACE`

awk "/$SEARCH_escaped/ {print \"$REPLACE_escaped\"}" <<< $SEARCH
0

Да, это можно сделать с помощью sed, но я согласен с Дженсом. Я бы порекомендовал использовать подходящий инструмент, такой как библиотека python + lxml, для поиска и замены ваших тегов.

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