Поиск и замена символа в XML-файле с помощью команды sed не работает [закрыто]

У меня есть XML-файл с именем myfile.xml

<!--This is an xml document for test-->
<a><!--This is root node-->
   <b>
     <c>Hi&Welcome</c>
   </b>
   <d>Hello & How are you?</d>
</a>

Я хочу это преобразование

<!--This is an xml document for test-->
<a><!--This is root node-->
   <b>
     <c>Hi&amp;Welcome</c>
   </b>
   <d>Hello &amp; How are you?</d>
</a>

Я использую команду sed следующим образом, чтобы заменить все вхождения & на &

sed -i 's:&:&amp;:' myfile.xml

, но я получаю `undefined label ' yfile.xml 'ошибка. Я не могу продолжить. Как это сделать?

-1
задан 5 October 2015 в 16:21

2 ответа

Если у Вас нет GNU sed, sed нуждается в параметре для -i

sed -i.bak 's:&:&amp;:' myfile.xml

и файл резервной копии является хорошей идеей или …

… используют Perl ;)

Тест с

perl -pe 's/&/&amp;/' myfile.xml

и сделайте оперативное редактирование с

perl -pi -e 's/&/&amp;/' myfile.xml

Но только однажды.

После команды, содержания myfile.xml

<!--This is an xml document for test-->
<a><!--This is root node-->
   <b>
     <c>Hi&amp;Welcome</c>
   </b>
   <d>Hello &amp; How are you?</d>
</a>
2
ответ дан 28 July 2019 в 13:02

Необходимо выйти из & из-за специального символа. И Вам нужны две передачи для завершения его.

Использование:
1. sed 's|Hi\&|Hi\&amp;|g' yourfile.xml. Это будет производить:

<!--This is an xml document for test-->
<a><!--This is root node-->
   <b>
     <c>Hi&amp;Welcome</c>
   </b>
   <d>Hello & How are you?</d>
</a>
  1. вторая передача будет: sed 's|Hello\ \&| \Hello\ \&amp;|g' test.xml. Производит:

    <!--This is an xml document for test-->
    <a><!--This is root node-->
       <b>
        <c>Hi&amp;Welcome</c>
       </b>
       <d> Hello &amp; How are you?</d>
    </a>
    

    , Конечно, использование -i переключатель для создания этого permenant.

Другой усовершенствованный путь на основе комментария @terdon ниже:

sed -e 's/Hello &/Hello \&amp;/' -e 's/Hi&/Hi\&amp;/' filename.xml

-1
ответ дан 28 July 2019 в 13:02

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

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