sed 명령을 사용하여 XML 파일의 특정 태그 값 검색 및 바꾸기

sed 명령을 사용하여 XML 파일의 특정 태그 값 검색 및 바꾸기

Bash 쉘 스크립트를 통해 XML 파일을 조작해야 하는 작업이 있습니다.

다음과 같이 진행하세요:

  • XML 파일의 값을 쿼리합니다.
  • 다른 요소의 값을 새로운 값으로 바꿉니다.

다음은 샘플 XML입니다.

<context-param>
    <param-name>com.sun.faces.sendPoweredByHeader</param-name>
    <param-value>false</param-value>
  </context-param>
  <context-param>
    <param-name>com.sun.faces.numberOfViewsInSession</param-name>
    <param-value>25</param-value>
  </context-param>
  <context-param>
    <param-name>testing</param-name>
    <param-value>25</param-value>
  </context-param>

parm 값을 업데이트하려면 쉘 스크립트를 사용해야 합니다 <param-value>25</param-value>.<param-value>3</param-value>

매개변수 name() 의 매개변수 값만 업데이트하는 SED 명령이 무엇인지 아시나요 <param-name>com.sun.faces.numberOfViewsInSession</param-name>?

다음 명령을 사용해 보았습니다.

sed -i 's/<param-value>25<\/param-value>/<param-value>3<\/param-value>/' test.xml

하지만 이 명령은 모든 매개변수 값을 업데이트합니다. com.sun.faces.numberOfViewsInSession을 업데이트하면 됩니다.

답변1

XMLStarlet을 사용하고 문서에 루트 노드가 있다고 가정합니다.

xmlstarlet ed \
    -u '//context-param[param-name = "com.sun.faces.numberOfViewsInSession"]/param-value[. = 25]' \
    -v 3 file.xml

그러면 올바른 param-value노드(값이 25인 노드( [. = 25]이전 값이 중요하지 않은 경우 비트 제거)와 자식 값이 25인 노드의 자식 context-param)가 선택되고 해당 값이 3으로 변경됩니다.param-namecom.sun.faces.numberOfViewsInSession

생성된 문서는 다음과 같습니다( root가짜 노드 삽입).

<?xml version="1.0"?>
<root>
  <context-param>
    <param-name>com.sun.faces.sendPoweredByHeader</param-name>
    <param-value>false</param-value>
  </context-param>
  <context-param>
    <param-name>com.sun.faces.numberOfViewsInSession</param-name>
    <param-value>3</param-value>
  </context-param>
  <context-param>
    <param-name>testing</param-name>
    <param-value>25</param-value>
  </context-param>
</root>

답변2

sed -i 's#<param-value>25</param-value>#<param-value>3</param-value>#' test.xml

답변3

다음 sed 명령을 사용하면 특정 태그 값을 업데이트할 수 있습니다.

sed -i '/<param-name>com.sun.faces.numberOfViewsInSession<\/param-name>/{n;s/<param-value>3<\/param-value>/<param-value>25<\/param-value>/}' test.xml

관련 정보