XML 파일에서 주석을 제거할 수 있는 명령줄 도구가 있습니까? 아니면 이를 수행하기 위해 XML 파서를 사용하는 작은 프로그램을 작성해야 합니까?
업데이트: 나는 가능한 모든 XML 파일의 하위 집합만 처리하는 솔루션에는 관심이 없습니다.
예를 들어 정규식은 XML 구문 분석을 처리할 수 없습니다.
답변1
나는 이런 식으로 할 것입니다 :
cat myfile.xml | sed '/<!--.*-->/d' | sed '/<!--/,/-->/d' > cleaned.xml
또는:
awk 'in_comment&&/-->/{sub(/([^-]|-[^-])*--+>/,"");in_comment=0}
in_comment{next}
{gsub(/<!--+([^-]|-[^-])*--+>/,"");
in_comment=sub(/<!--+.*/,"");
print}'
또는:
xmlstarlet ed -d '//comment()' file.xml
답변2
상위 답변을 확장합니다. 전체 행이 아닌 주석만 삭제하려면 다음을 사용해야 합니다.
sed 's/<!--.*-->//'
내 경우에는 전체 내용이 한 줄에 있는 축소된 XML 파일이 있었는데 이전 솔루션에서는 주석이 있는 줄 전체를 삭제했기 때문에 내 파일이 완전히 지워졌습니다.
답변3
이는 XML에서 여러 줄 주석(예: 실패한 테스트)을 정리하는 데 유용합니다. 최소한 직접 선택한 주석은 최종 사용자에게 도움이 됩니다.
perl -i -w -0777pe 's/<!--(.(?<!(HELP|TODO)))*?-->//sg' somefile.xml
관련 정규식에 대한 추가 정보:https://stackoverflow.com/a/1240293/1422630
동일한 결과를 얻을 수 있는 방법이 있지만 xmlstarlet을 사용하는 경우 정규 표현식이 처리할 수 없는 몇 가지 예외가 있을 수 있으므로 선호하지만 지금은 이것이 제가 사용해야 하는 것입니다.