Правильно ли замените & & XML?

Я хочу заменить '&' на & Кроме следующих событий специальных символов XML.

 " &quot; ' &apos; < &lt; > &gt; & &amp; 

Я попробовал метод, упомянутый в Замените указанный символ между двумя строками? и заменить все `&`, но не на то, что в XML-сущности `& amp;` с `#` с sed в данном теге XML , похоже, не работает для меня.

Использование perl one-liner:

 perl -pe 's/&(?!(quot|apos|lt|gt|amp);)/&amp;/g' 

Флаг -p заставляет perl вести себя как sed (цикл по строкам STDIN, делать что-то, печатать в STDOUT), -e сообщает ему прочитать команду из аргумента, а не файла.

Подстановка регулярных выражений делает следующее:

  • матч &
    • не сопровождаемый
    • или aposamp
    • точка с запятой
  • заменить на &amp;
  • для всех совпадений в режиме онлайн.

Использовать его как sed, например

 perl -pe 's/&(?!(quot|apos|lt|gt|amp);)/&amp;/g' < my-file.xml ./myscript.sh | perl -pe 's/&(?!(quot|apos|lt|gt|amp);)/&amp;/g'