<source file='/home/anpham/Projects/vm-builder/30G'/>
위 출력에서 절대 경로를 추출하기 위해 sed 명령을 사용해 보았지만 출력에서 문자열이 잘리지 않습니다. 다음 명령은 나의 시도입니다.
virsh dumpxml --domain "test1" | grep 'source file' | head -1 | sed '/^<source$/d'
출력은 여전히 다음과 같습니다.
<source file='/home/anpham/Projects/vm-builder/30G'/>
답변1
file
XML 문서에 있는 모든 노드의 모든 속성 값을 추출하려면 다음을 사용할 수 있습니다.source
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
.
답변2
모든 UNIX 시스템의 모든 쉘에서 sed를 사용하십시오.
$ sed "s/.*<source file='\([^']*\).*/\1/" file
/home/anpham/Projects/vm-builder/30G
답변3
우선, sed 명령은 단어만 포함하는 줄을 제외하고는 어떤 것과도 일치하지 않습니다 source
. 이는 ^
단어 앞에 (줄 시작)을 넣고 $
단어 뒤에 (줄 끝)을 넣기 때문입니다 source
. 둘째: grep이나 head 없이도 가능합니다.
virsh dumpxml --domain "test1" | sed -ne 's/\s*<source file=.\([^\/].*\).\/>.*/\1/; t end; b; :end; p; Q'