![unix 명령을 사용하여 xml 파일의 한 줄을 변수나 파일에 저장된 줄 집합으로 바꾸는 방법은 무엇입니까?](https://rvso.com/image/1414653/unix%20%EB%AA%85%EB%A0%B9%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20xml%20%ED%8C%8C%EC%9D%BC%EC%9D%98%20%ED%95%9C%20%EC%A4%84%EC%9D%84%20%EB%B3%80%EC%88%98%EB%82%98%20%ED%8C%8C%EC%9D%BC%EC%97%90%20%EC%A0%80%EC%9E%A5%EB%90%9C%20%EC%A4%84%20%EC%A7%91%ED%95%A9%EC%9C%BC%EB%A1%9C%20%EB%B0%94%EA%BE%B8%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
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