как удалить строку из файла XML

как удалить только строку из xml-файла (с помощью sed / awk или perl one liner line)

которые начинаются с:

<units> 

и закончился

 </Networks> 

как последующее

 <units><unit ip= ............ </units><ranges/></Networks> 

3 Solutions collect form web for “как удалить строку из файла XML”

Попробуй это:

 perl -i -pe 's|^<units>.*</Networks>$||' /my/filename 

Обратите внимание: если у вас есть ведущее или конечное пространство в строке, вам это нужно:

 perl -i -pe 's|^ *<units>.*</Networks> *$||' /my/filename 

I uesd pipe как разделитель, а не слэш, чтобы избежать ненужного выхода.

Не используйте регулярные выражения для синтаксического анализа XML. Это отличный способ создать хрупкий код, потому что есть множество абсолютно правильных вещей, которые вы можете сделать с XML, который сломает регулярное выражение. Такие вещи, как переформатирование XML в полностью допустимых способах (например, «довольно печатать» его в вложенной / отступом), нарушит ваш код.

Вместо этого я бы предложил – использовать синтаксический анализатор XML. Лично мне нравится модуль XML::Twig в perl.

Ваш комментарий предполагает, что вы пытаетесь добавить материал в элемент <Networks> в вашем XML.

Итак, как насчет чего-то вроде этого:

 #!/usr/bin/perl use strict; use warnings; use XML::Twig; my $xml_text = '<XML> <Networks><units><unit ip="1.2.3.4" /></units><ranges/></Networks> </XML>'; my $parser = XML::Twig->new( 'pretty_print' => 'indented' ); #would probably use 'parsefile' instead here $parser->parse($xml_text); print "\nBefore:\n"; $parser->print; #insert a new element into 'Networks': $parser->root->first_child('Networks')->insert_new_elt( 'last_child', #position - end of "Networks" element 'new_element', #element { 'attribute_here' => "value_here", 'another_attribute' => 'another_value', }, #attributes as key value pairs "Content_here", #element content ); print "\nAfter:\n"; $parser->print; 

Поскольку вы указываете, что знаете, что это нарушит ваш XML, вы можете сделать то, что хотите, одним из них:

  1. Perl

     perl -ne 'print unless m#^<units>.*</Networks>$#' file.xml perl -ne 'm#^<units>.*</Networks>$# ? next : print' file.xml 
  2. AWK

     awk '!/^<units>.*<\/Networks>$/' file.xml 
  3. СЕПГ

     sed '/^<units>.*<\/Networks>$/d' file.xml 
  4. Grep

     grep -Ev '^<units>.*<\/Networks>$' file.xml 
  5. Bash (и zsh), ради завершения

     while read -r line; do [[ "$line" =~ ^\<units\>.*\<\/Networks\>$ ]] || printf "%s\n" "$line" done < file.xml 
  • Создайте пары «тег элемента» из списков «item, item, ... | tag»
  • Как распечатать последнее слово, которое содержит разделитель поля
  • Более сжатые методы для обертывания файла, чем использование sed
  • Распечатайте строку в stdout, которая соответствует выражению, если вывод содержит другое выражение
  • sed шаблон, за которым следует один одиночный символ один или несколько раз
  • Удаление строк не более или меньше полей 'N'?
  • Чтобы удалить лишнее пространство из строки с помощью команды оболочки
  • Почему непоследовательность с использованием cat и echo для этой команды sed?
  • Добавление строки текста в несколько файлов
  • Печать текста между двумя строками - опустить второе появление
  • Выполните поиск регулярных выражений по ранее определенной линии с регулярным выражением (однострочный)
  • Interesting Posts

    Почему пользовательское пространство медленнее ядра?

    Функция Shell, чтобы проверить, есть ли приостановленный процесс, являющийся дочерним элементом этой оболочки?

    Не удалось подписать CSR с помощью корневого ключа CA

    Как получить «нулевое время простоя» на HAProxy с конфигурацией балансировки нагрузки?

    Как изменить цвет символа при хвосте и tr

    как работает команда времени

    Как настроить QoS на IP-основу?

    Как уменьшить количество исполнений с помощью xargs -I

    Нужна помощь в обработке текстового файла с awk для соответствия формату файлов CSV

    Открытие приложений на другом рабочем столе из командной строки

    Есть ли способ использовать подстановку параметров для запуска одного завитка на двух разных серверах?

    Как я `umount` / proc?

    Переименование почтовых ящиков в mutt

    Имеются ли права родительского каталога при доступе к подкаталогу?

    устранение неисправностей

    Linux и Unix - лучшая ОС в мире.