Проблема была устранена системными администраторами нашего хоста. Были конфликтующие файлы конфигурации. Проблема решена. танец победы
С любым sed в любой оболочке на каждой машине UNIX:
$ sed "s/.*<source file='\([^']*\).*/\1/" file
/home/anpham/Projects/vm-builder/30G
Чтобы извлечь значение всех file
атрибутов всех source
узлов в XML-документе, вы можете использовать xmlstarlet
следующим образом:
xmlstarlet sel -t -v '//source/@file' -nl file.xml
Или, читая вашу команду virsh
:
virsh dumpxml --domain "test1" | xmlstarlet sel -t -v '//source/@file' -nl
Проблема с вашим конвейером заключается в том, что последняя команда sed
пытается удалить все строки, состоящие только из одной строки<source
(и ничего больше ). У вас нет таких строк на входе в sed
.
Во-первых, :ваша команда sed никогда не будет соответствовать ничему, кроме строки, содержащей только слово source
. Это потому, что вы поместили^
(начало строки )прямо перед и$
(конец строки )сразу после слова source
. Во-вторых :это можно сделать без grep и головы:
virsh dumpxml --domain "test1" | sed -ne 's/\s*<source file=.\([^\/].*\).\/>.*/\1/; t end; b; :end; p; Q'