匹配某一行时,用 sed 替换特定部分下的标签值

匹配某一行时,用 sed 替换特定部分下的标签值

我想使用 sed 命令(或 awk)在文件某个部分下匹配另一行时更改一行。以下是文件的示例:

MyFic.txt 摘录:

  <PlayList>
     ... Some tags ...
     <Album>X1</Album>
     ... oThers tags ...
     <Group>X2</Group>
     ... Some tags ...
   </PlayList>
   <PlayList>
      ... Some tags ...
      <Album>...</Album>
      ... oThers tags ...
      <Group>...</Group>
      ... Some tags ...
    </PlayList>

我想将标签 Album 值为 X1 时标签 Group by X3 的值仅更改为 PlayList 部分。以下命令可正常工作:

sed -i '/< Album>X1/,/<\/PlayList>/ s/< Group>.*/< Group>X3<\/location>/' MyFic.txt

但这并不是我真正想要的。我想要的是类似这样的东西:

sed -i '/< PlayList>/,/<\/PlayList>/ {Containing  < Album>X1} s/< Group>.*/< Group>X3<\/location>/' MyFic.txt

我不知道如何使用 sed 命令编写这部分代码:{Containing < Album>X1}

你有主意吗?

答案1

要处理 XML,请使用适当的 XML 处理工具。例如,西沙

cd //PlayList[Album='X1']/Group
set . 'X3'

相关内容