我们的应用程序在接收端进行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执行此操作的其他任何选项?
答案 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
)。