unix 명령을 사용하여 xml 파일의 한 줄을 변수나 파일에 저장된 줄 집합으로 바꾸는 방법은 무엇입니까?

unix 명령을 사용하여 xml 파일의 한 줄을 변수나 파일에 저장된 줄 집합으로 바꾸는 방법은 무엇입니까?

XML 파일이 있습니다

검색해야 할 줄은 다음과 같습니다.

SEARCH='<?xml version="1.0" encoding="UTF-8" standalone="no"?><SSC>'

검색된 이 값은 다음 변수의 값으로 대체되어야 하거나 다른 파일에 저장할 수도 있습니다.

REPLACE='<?xml version="1.0" encoding="UTF-8" standalone="no"?><SSC><ErrorContext><CompatibilityMode>0</CompatibilityMode><ErrorOutput>1</ErrorOutput>.......some more tags.....</MethodContext>
'

SED 또는 AWK와 같은 Unix 명령을 사용하여 이를 어떻게 수행할 수 있습니까? (여기서 SEARCH를 REPLACE로 바꿔야 합니다.

답변1

예, sed로 할 수 있지만 Jens의 의견에 동의합니다. 태그를 검색하고 교체하려면 python + lxml 라이브러리와 같은 적절한 도구를 사용하는 것이 좋습니다.

답변2

내가 볼 수 있는 한 이스케이프할 문자는 다음과 같습니다.

awk '/<\?xml version="1.0" encoding="UTF-8" standalone="no"\?><SSC>/ {print "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><SSC><ErrorContext><CompatibilityMode>0</CompatibilityMode><ErrorOutput>1</ErrorOutput>.......some more tags.....</MethodContext>"}' <<< '<?xml version="1.0" encoding="UTF-8" standalone="no"?><SSC>'
  • 검색 필드에서: ?를 탈출하시겠습니까? 문자는 \?
  • REPLACE 필드에서: " 문자를 \"로 이스케이프하려고 합니다.

또는 변수를 사용해야 하는 경우 SEARCH 필드에서 "를 이스케이프하고 문자를 두 번 이스케이프합니다. 한 번은 변수에 저장되고 두 번은 에코됩니다!

SEARCH_escaped=`sed -e 's/\?/\\\?/g' -e 's/\"/\\\"/g' <<< $SEARCH`
REPLACE_escaped=`sed 's/\"/\\\"/g' <<< $REPLACE`

awk "/$SEARCH_escaped/ {print \"$REPLACE_escaped\"}" <<< $SEARCH

관련 정보