【问题标题】:Script Remove desire XML Tags脚本删除欲望 XML 标签
【发布时间】:2022-10-24 09:22:43
【问题描述】:

我确实有下一个 XML 正文,

<userPermissions>
    <enabled>true</enabled>
    <name>ManageReportsInPubFolders</name>
</userPermissions>
<userPermissions>
    <enabled>true</enabled>
    <name>ManageRoles</name>
</userPermissions>
<userPermissions>
    <enabled>true</enabled>
    <name>ManageSandboxes</name>
</userPermissions>
<userPermissions>
    <enabled>true</enabled>
    <name>ManageSelfService</name>
</userPermissions>
<userPermissions>
    <enabled>true</enabled>
    <name>ManageSharing</name>
</userPermissions>

我想删除:

<userPermissions>
    <enabled>true</enabled>
    <name>ManageSandboxes</name>
</userPermissions>

所以渴望输出:

<userPermissions>
    <enabled>true</enabled>
    <name>ManageReportsInPubFolders</name>
</userPermissions>
<userPermissions>
    <enabled>true</enabled>
    <name>ManageRoles</name>
</userPermissions>
<userPermissions>
    <enabled>true</enabled>
    <name>ManageSelfService</name>
</userPermissions>
<userPermissions>
    <enabled>true</enabled>
    <name>ManageSharing</name>
</userPermissions>

我尝试了以下命令:

sed -i '' '//,/</userPermissions>/d',但它会删除所有 userPermissions 标签,我不需要这个。请让我知道你的想法/

【问题讨论】:

  • XML 示例不是格式良好,它缺少一个根标签。基于 XSLT 的解决方案怎么样?
  • 你的问题不清楚:为什么你想删除那个特定的&lt;userPermissions&gt;吗?是因为它是第三个元素还是因为它有一个&lt;name&gt;ManageSandboxes&lt;/name&gt; 子元素?
  • <Profile> <userPermissions> <enabled>true</enabled> <name>ManageReportsInPubFolders</name> </userPermissions> <userPermissions> <enabled>true</enabled> <name>ManageRoles</name> </userPermissions> < userPermissions> <enabled>true</enabled> <name>ManageSelfService</name> </userPermissions> <userPermissions> <enabled>true</enabled> <name>ManageSharing</name> </userPermissions> </Profile>

标签: xml bash


【解决方案1】:

这是一个可以解决问题的代码 sn-p:

sed "/<userPermissions>/,/</userPermissions>/ {
  N
  N
  N
  /.*ManageSandboxes.*/d
}"

请注意,每个命令都需要在新行中才能正常工作。

简而言之,我将接下来的 3 行附加到当前模式空间并检查“ManageSandboxes”是否在我的 4-lines-in-1 行中的任何位置,如果是,则将其全部删除。

如果您想了解更多关于 sed 的信息,here 是一个非常好的指南。

【讨论】:

  • 我试过 sed "/<userPermissions>/,/</userPermissions>/ { N N N /.*ManageSandboxes.*/d }" 但它也删除了底部的父标签
  • 好吧,您可以使用附加的行数,删除末尾的“d”以进行测试,但无论如何,如果您坚持使用单行格式,则需要添加“;”像这样:“/<userPermissions>/,/</userPermissions>/ { N; N; N; /.*ManageSandboxes.*/d ;}”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-09
  • 2010-11-27
  • 1970-01-01
  • 2017-02-27
  • 1970-01-01
  • 1970-01-01
  • 2016-01-30
相关资源
最近更新 更多