匹配行時用 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>

當標籤專輯值為 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'

相關內容