
Я хочу заменить «&» на &
За исключением следующих вхождений специальных символов XML.
" "
' '
< <
> >
& &
Я попробовал метод, упомянутый вЗаменить указанный символ между двумя строками?иЗамена всех `&`, кроме одного в XML-сущности `&`, на `#` с помощью sed в заданном XML-тегепохоже, мне это не подходит.
решение1
Использование однострочного кода на Perl:
perl -pe 's/&(?!(quot|apos|lt|gt|amp);)/&/g'
Флаг -p
заставляет Perl вести себя как sed (цикл по строкам STDIN, выполнение действий, вывод на STDOUT), -e
сообщает ему, что нужно считывать команду из аргумента, а не из файла.
Замена регулярного выражения делает это:
- соответствовать
&
- не сопровождается
quot
илиapos
...amp
- точка с запятой
- заменить
&
- для всех матчей онлайн.
Чтобы использовать его как sed, например
perl -pe 's/&(?!(quot|apos|lt|gt|amp);)/&/g' < my-file.xml
./myscript.sh | perl -pe 's/&(?!(quot|apos|lt|gt|amp);)/&/g'