Извлечение строки в одинарной кавычке

Проблема была устранена системными администраторами нашего хоста. Были конфликтующие файлы конфигурации. Проблема решена. танец победы

2
04.03.2020, 12:31
3 ответа

С любым sed в любой оболочке на каждой машине UNIX:

$ sed "s/.*<source file='\([^']*\).*/\1/" file
/home/anpham/Projects/vm-builder/30G
1
28.04.2021, 23:21

Чтобы извлечь значение всех 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.

8
28.04.2021, 23:21

Во-первых, :ваша команда sed никогда не будет соответствовать ничему, кроме строки, содержащей только слово source. Это потому, что вы поместили^(начало строки )прямо перед и$(конец строки )сразу после слова source. Во-вторых :это можно сделать без grep и головы:

virsh dumpxml --domain "test1" | sed -ne 's/\s*<source file=.\([^\/].*\).\/>.*/\1/; t end; b; :end; p; Q'
0
28.04.2021, 23:21

Теги

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