Измените несколько строк файла XML с помощью командной строки

Посмотрев текст ниже, как мне заменить несколько строк текста?

<Model500> ABC BCD CDE </Model500> <Model500> 123 234 345 </Model500> 

Выходной сигнал может быть как ниже

 <Model500> AAA BBB CCC </Model500> <Model500> 111 333 555 </Model500> 

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

  • извлекать блоки текста из xml-файла с условием
  • VIM переходит от одного тега xml к закрытию
  • фильтровать текстовый файл xml
  • Bash / Linux Инструменты для исправления xml
  • Удалить тег и содержимое на основе дочернего тега и добавить новый контент - Shellscript xml
  • Как синхронизировать 2 xml-файла?
  • Какой редактор можно использовать для выделения выделенных файлов проекта Mallard?
  • Замена всего `&`, но не единственного в XML-сущности `& amp;` с `#` с sed в заданном теге XML
  • One Solution collect form web for “Измените несколько строк файла XML с помощью командной строки”

    Используйте подходящий инструмент xml , в shell, xmlstarlet является хорошим:

     xmlstarlet edit -L -u "//Model500[1]" -v "AAA BBB CCC" file.xml xmlstarlet edit -L -u "//Model500[2]" -v "111 333 555" file.xml cat file.xml 

    Выражение //Model500[2] является выражением Xpath

    ПРИМЕЧАНИЕ №1

    вам нужно приложить свой XML-тег, например:

     <root> ... </root> 

    для корректности XML. Надеюсь, вы отрезали файл XML для вашего вопроса.

    ПРИМЕЧАНИЕ ²

    Вы также можете использовать python , perl , ruby и т. Д. И подходящую библиотеку xml lib.

    В perl :

     #!/usr/bin/perl use strict; use warnings; use XML::Simple; my $xml_file = 'file.xml'; my $xml = XMLin( $xml_file, KeepRoot => 1, ForceArray => 1, ); $xml->{root}->[0]->{Model500}->[0] = "AAA\nBBB\nCCC\n"; $xml->{root}->[0]->{Model500}->[1] = "111\n222\n333\n"; XMLout( $xml, KeepRoot => 1, NoAttr => 1, OutputFile => $xml_file, ); 
    Linux и Unix - лучшая ОС в мире.