我想使用 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'