获取单引号内的字符串

vin*_*ham 2 xml sed

<source file='/home/anpham/Projects/vm-builder/30G'/>
Run Code Online (Sandbox Code Playgroud)

我尝试使用 sed 命令从上面的输出中提取绝对路径,但输出没有修剪字符串。以下命令是我的尝试。

virsh dumpxml --domain "test1" | grep 'source file' | head -1 | sed '/^<source$/d' 
Run Code Online (Sandbox Code Playgroud)

输出仍然是:

<source file='/home/anpham/Projects/vm-builder/30G'/>
Run Code Online (Sandbox Code Playgroud)

Kus*_*nda 8

要提取XML 文档file中所有source节点的所有属性的值,您可以这样使用xmlstarlet

xmlstarlet sel -t -v '//source/@file' -nl file.xml
Run Code Online (Sandbox Code Playgroud)

或者,从您的virsh命令中读取:

virsh dumpxml --domain "test1" | xmlstarlet sel -t -v '//source/@file' -nl
Run Code Online (Sandbox Code Playgroud)

您的管道的问题在于最终sed命令会尝试删除包含确切字符串<source(没有其他任何内容)的所有行。您在 的输入中没有这样的行sed

  • @vincentpham 您已经在使用`virsh`,这是我认为“必须安装”的另一个程序。每当您进行新安装时,您都可以将 `xmlstarlet` 与 `virsh` 一起安装(就像在安装任何其他生成 JSON 输出的实用程序时安装 `jq` 一样)。 (3认同)