2012-10-09 8 views
2

XML 데이터의 역 분석을 수행하는 애플리케이션이 수신 측에 있습니다. 우리의 응용 프로그램은 Java 또는 .NET을 사용할 수 없지만 Unix에서 실행되므로 awk와 Perl을 사용합니다. perl 또는 awk를 사용하여 xml 데이터에서 xml 선언을 제거합니다.

<?xml version="1.0" encoding="ISO-8859-1" ?> 

내가 Perl로 몇 가지 옵션을 시도하고 제거 얻을 AWK, 그러나이 동작하지 않습니다 수 :

파일의 XML 메시지

는 포함

perl -p -i -e "s/<?xml version="1.0" encoding="ISO-8859-1" ?>//g" inputFile 
perl -p -i -e "s/<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>//g" inputFile 
perl -p -i -e "s/<\?xml version="1.0" encoding="ISO-8859-1" \?>//g" inputFile 

하나를 PERL 또는 AWK를 사용하여이 작업을 수행 할 수있는 다른 옵션은 무엇입니까?

+1

XML을 "수신"할 때 XML 구문 분석기를 사용하고 있습니까? XML 선언은 파서 (parser)에 유용하며 파서 (parser)가 아닌 중요한 XML을 처리하려고하면 광기가 발생합니다. 그리고 유닉스를 사용하고 있다면 설치 한 모든 종류의 언어를 사용할 수 있습니다. –

+0

관련 답변을 보려면 "[awk, Perl 또는 Python으로 XML 문서를 마이닝 할 수 있습니까?] (http://stackoverflow.com/a/909076/128421)"를 참조하십시오. –

+0

'? '는 정규식 메타 문자이기 때문에 펄 코드가 작동하지 않습니다. 각각의 경우'?'또는'\? '로'?'를 대체하면 OK입니다. –

답변

1
이 데이터 파일 덮어 쓰지 않고 나를 위해 일한

:

perl -p -e 's/<\?xml version="1.0" encoding="ISO-8859-1" \?>//g' 

난 단지 파일을 덮어 줄을 (-i를) 내가 정규 정규식을 얻었을 때 손상시키지 않고.

+0

감사합니다. @JonathanLeffler. 그것은 효과가 있었다. – diaryfolio

1

파일이 XML 인 경우 전체 문자열을 일치시킬 필요는 없습니다. <?xml version이면 충분합니다.

시도 :

sed -i '/<\?xml version/d' file 

테스트

kent$ echo '<?xml version="1.0" encoding="ISO-8859-1" ?> 
foo 
bar 
xyz 
hello 
there'|sed '/<\?xml version/d' 
foo 
bar 
xyz 
hello 
there 
+0

@ 위와 같이 작동하지 않았습니다. "sed : 불법적 인 옵션 - i". "-i"옵션없이 시도했지만 메시지를 잘못 잘라 버렸습니다. – diaryfolio

+0

@ diaryfolio 답변에서 테스트를 참조하십시오, 그것은 당신이 원하는 것을 제공 했습니까? – Kent

+0

'$ 고양이 inputFile.xml 월요일 ' '$ 고양이 inputFile.xml | sed '/ <\? xml version/d'''$' 메시지 전체가 잘리는 것처럼 보입니다. – diaryfolio