【发布时间】:2019-05-30 06:52:41
【问题描述】:
我有一个xml文件如下
<Module dataPath="/abc/def/xyz" handler="DataRegistry" id="id1" path="test.so"/>
<Module id="id2" path="/my/file/path">
<Config>
<Source cutoffpackage="1" dailyStart="20060819" dataPath="/abc/def/xyz" />
<Source cutoffpackage="1" dailyStart="20060819" dataPath="/abc/def/xyz" id="V2"/>
</Config>
</Module>
我只想从每个moduleid 中提取dataPath 的值。
我用的,类似的命令
`grep 'id2' file | grep -ioPm1 "(?<=DataPath=)[^ ]+"`
这是从第一个模块 id 给我的,而不是第二个模块 id。因为第二个模块在多行中。
我如何使用 shell 脚本来做到这一点?
期望的输出是——如果我想得到 id1 模块的数据路径,那么应该得到 p>
/my/file/path
对于第二个模块 id,比如 id2,我应该得到用逗号分隔的数据路径
/my/file/path, /my/file/path
或者我对数据路径进行 grep 的第二种方法是仅替换 <Module 和 </Module> 之间的 newline character,然后我可以使用 grep。
【问题讨论】:
-
@jww,不,不是。我已经编辑了问题以更好地理解
-
您想要的输出显示两行。第一行的值为 1 个
dataPath属性,第二行的值为 2 个dataPath属性——每个属性用逗号分隔。大概该结构表明与您的源 xml 相关的模式?每个换行符是否等同于<Module>元素节点?即第一行表示有一个<Module>与1 个关联的dataPath属性,第二行表示有2 个dataPath属性与另一个<Module>关联。大概所有匹配值的列表(每行一个值)不是您想要的。请在 OP 中澄清。 -
@RobC,我有一个配置文件,其中包含每个
module的配置(由 id 知道)。一些modules的完整信息在一行中,而一些module的信息在多行中。我只需要为每个module提取一个标签datapath。这可能是一个 moduleid 可能有多个datapath