當另一行在文件的某個部分下匹配時,我想使用 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>
當標籤專輯值為 X1 時,我想僅將標籤 Group by X3 的值變更為播放清單部分。以下命令運作正常:
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 處理工具。例如,xsh:
cd //PlayList[Album='X1']/Group
set . 'X3'