라인 일치시 특정 섹션 아래의 태그 값을 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 처리 도구를 사용하십시오. 예를 들어,xsh:

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

관련 정보