从 XML 中返回的 API 调用中提取字符串

Extract a string from a returned API call in XML

我想获取 XML API 输出并从文件中提取名称 (name="vPC-NAME")。由于此调用 returns 多个名称,我需要能够搜索双引号之间的任何文本。

我试过了

awk 'name="*"' PCMappings_Result2.xml

cat file | egrep -o 'name=\"*\"




<pcAggrIf activePorts="1" adminSt="up" autoNeg="on" bw="0" childAction="" createTime="18074:07:16:08.069" ctrl="fast-sel-hot-stdby,graceful-conv,susp-individual" delay="1" descr="" dn="node-101/sys/aggr-[po4]" dot1qEtherType="0x8100" ethpmCfgFailedBmp="" ethpmCfgFailedTs="00:00:00:00.000" ethpmCfgState="0" fcotChannelNumber="Channel32" fop="eth1/45" hashDist="adaptive" id="po4" inhBw="unspecified" iod="67" isPlatformSupported="yes" isReflectiveRelayCfgSupported="Supported" lastBundleMbr="eth1/47" lastBundleTime="18074:07:16:08.318" lastSt="successful" lastStCause="" lastTime="18074:07:16:08.318" lastUnbundleMbr="unspecified" lastUnbundleTime="00:00:00:00.000" layer="Layer2" lcOwn="local" lif="0" linkDebounce="100" linkLog="default" loadDeferStartTime="00:00:00:00.000" ltl="8198" maxActive="16" maxLinks="16" mdix="auto" medium="broadcast" minLinks="1" modTs="2019-06-27T07:51:04.547+00:00" mode="trunk" monPolDn="uni/infra/moninfra-default" mtu="9000" name="vPC-NAME"/>

您应该为 XML 使用合适的工具,但如果没有可用的选项,这将起作用:

awk -F'name="' 'NF>1{split(,a,"\"");print a[1]}' file
vPC-NAME
  • 将行除以 name=" 作为字段分隔符
  • 如果行至少有两个字段 NF>1 做:
  • 将最后一部分 </code> 拆分为 <code>" 并将其存储在数组 a
  • 打印数组的第一部分a[1]

如果一行有多个name,需要循环遍历:

awk '{for (i=1;i<=NF;i++) if ($i~/^name/) {split($i,a,"\"");print a[2]}}' file
n3k-p45
esxi2-vpc