используя Sed для поиска и замены текста в файле XML

У меня есть следующий текст в File.XML:

<!--UpdateAccountGUIDs>UpdateAndExit</UpdateAccountGUIDs-->

Я хотел бы заменить его на

<UpdateAccountGUIDs>UpdateAndExit</UpdateAccountGUIDs>

, который я пробовал:

$ sed -i 's/<!--UpdateAccountGUIDs>UpdateAndExit</UpdateAccountGUIDs-->/<UpdateAccountGUIDs>UpdateAndExit</UpdateAccountGUIDs>/' File.XML

Но получите эту ошибку:

sed: -e expression #1, char 63: unknown option to `s'
6
задан 1 April 2014 в 20:26

1 ответ

Проблема - то, что Ваш шаблон поиска содержит /, который Вы используете в качестве заменяющего разделителя, необходимо использовать другой символ для этого или выйти /:

sed -i 's#<!--UpdateAccountGUIDs>UpdateAndExit</UpdateAccountGUIDs-->#<UpdateAccountGUIDs>UpdateAndExit</UpdateAccountGUIDs>#' File.XML

или

sed -i 's/<!--UpdateAccountGUIDs>UpdateAndExit<\/UpdateAccountGUIDs-->/<UpdateAccountGUIDs>UpdateAndExit<\/UpdateAccountGUIDs>/' File.XML

Примечание, которое Вы должны никогда регулярные выражения использования для парсинга [X] HTML .

Наконец, как правило, при работе с регулярными выражениями, меньше больше. Необходимо попытаться определить самый простой эксклюзивный шаблон, а не повторить весь текст. Это не только делает Ваш код намного легче читать, он также избегает проблем как та, с которой Вы сталкивались. Например:

sed -i -r 's/<!--(UpdateAccountGUIDs.+?)-->/<\1>/' File.XML

Здесь, эти -r включает синтаксис расширенного регулярного выражения, таким образом, мы можем использовать () для получения группы (не будучи должен выйти из круглых скобок) и затем назвать полученный текст \1. Так, команда выше просто ищет комментарий, который смежен с UpdateAccountGUIDs, расширяется до первого конца оператора комментария и затем делает замену.

0
ответ дан 1 April 2014 в 20:26

Другие вопросы по тегам:

Похожие вопросы: