sed удаляет несколько строк, когда упоминается начальный и конечный шаблон - PullRequest
0 голосов
/ 03 апреля 2019

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

<?xml>
<employee name="abc">ABC</employee>
<employee name="def">DEF</employee>
<!-- abc@gmail.com
this comment is added
to <employee name="gh">
</employee>
-->

?> 

Я хочу удалить некоторые сведения о сотруднике из этого файла. Данные сотрудника, подлежащие удалению, упоминаются в другом файле delemp.txt. азбука GH

while read line
do 
i=\"$line\"
echo $i
find . -name "emp.xml" -type f | xargs sed -i -e '/employee name='$i'/,/<\/employee>/d'

done < delemp.txt

Я читаю delemp.txt и получаю данные сотрудника, которые нужно удалить, и ищу имя сотрудника = и конечный тег сотрудника, но этот код не работает

Даже если я попытаюсь

sed -i '/employee name=\"abc\"/,/<\/employee>/d' emp.xml

Удаляет первые 2 строки, т.е. name = "abc" и "def"

Ответы [ 2 ]

0 голосов
/ 03 апреля 2019

Использование в командной строке:

while read name; do
    xml_grep2 -v "/root/emwantedployee[@name='$name']" file.xml > /tmp/new_file.xml &&
        mv /tmp/new_file.xml file.xml
done < names.txt

Использование App :: Xml_grep2 (будет установлено)

0 голосов
/ 03 апреля 2019

исправляя xml, чтобы быть действительным

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <employee name="abc">ABC</employee>
  <employee name="def">DEF</employee>
  <!-- abc@gmail.com
this comment is added
to <employee name="gh">
</employee>
-->
</root>

, используя и правильное выражение для удаления узла XML

xmlstarlet ed -L -d '/root/employee[@name="abc"]' file.xml

результат

<?xml version=xmlstarlet ed -L -d '/root/employee[@name="abc"]' file.xml"1.0" encoding="UTF-8"?>
<root>
  <employee name="def">DEF</employee>
  <!-- abc@gmail.com
this comment is added
to <employee name="gh">
</employee>
-->
</root>

наконец:

while read name; do
    xmlstarlet ed -L -d "/root/employee[@name='$name']" file.xml
done < names.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...