使用perl或awk从xml数据中删除xml声明

时间:2012-10-09 14:12:07

标签: xml perl awk xml-serialization xml-declaration

我们的应用程序在接收端进行XML数据的逆向分析。我们的应用程序没有Java或.NET可用,但在Unix中运行,所以它有awk和Perl。

文件中的XML消息包含:

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

我在Perl和awk中尝试了一些选项来删除它们,但无法使它们起作用:

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执行此操作的其他任何选项?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

这对我有用而不会覆盖数据文件:

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

当我确定我的基本正则表达式没有造成损坏时,我只会覆盖文件(-i)。